incrustado C junior dudas?

M

mImoto

Guest
Hola,

Tengo dos dudas en este y no sé dónde encontrar una respuesta.

En primer lugar:

Me gustaría que si pcfg_temp es diferente de 0b00000111 o diferentes de 0b00001110 o diferentes de 0b00000100 o diferentes de
0b00000010 entonces algo pasa.He usado la siguiente codificación, pero no estoy seguro.

if (pcfg_temp! = ((0b00000111) | | (0b00001110) | | (0b00000100) | | (0b00000010)))
(
.....
)

Mi duda es que el resultado de (0b00000111) | | (0b00001110) | | (0b00000100) | | (0b00000010)) es tal vez tan boolean este no es el camino correcto.Cualquier sugerencia?

Y segundo:

anular la función ()
(
READ_DATA tris_desired sindicato;
READ_DATA tris_now sindicato;
READ_DATA bidir_now sindicato;
READ_DATA tris_final sindicato;
READ_DATA error_final sindicato;
BYTE tris_temp = 0x00;
BYTE port_id = 0x00;
BYTE pin_id = 0x00;tris_desired.ReadData = 0x00;
tris_now.ReadData = 0x00;
bidir_now.ReadData = 0x00;
tris_final.ReadData = 0x00;
error_final.ReadData = 0x00;
....

)

Si yo uso esto, entonces el compilador funciona bien, pero si uso su lugar->anular la función ()
(
READ_DATA tris_desired sindicato;
READ_DATA tris_now sindicato;
READ_DATA bidir_now sindicato;
READ_DATA tris_final sindicato;
READ_DATA error_final sindicato;tris_desired.ReadData = 0x00;
tris_now.ReadData = 0x00;
bidir_now.ReadData = 0x00;
tris_final.ReadData = 0x00;
error_final.ReadData = 0x00;BYTE tris_temp = 0x00;
BYTE port_id = 0x00;
BYTE pin_id = 0x00;
....

)

El compilador me dice que tris_temp, etc no se declaran żwhy?.

Muchas gracias de antemano,

mimoto

 
Pruebe esto:

if ((pcfg_temp! = 0x07) & & (pcfg_temp! = 0x0D) & & (pcfg_temp! = 0x04) & & (pcfg_temp! = 0x02))
(
hacer algo;
)

no se define su sindicato:

unión READ_DATA
(
BYTE tris_desired;
BYTE tris_now;
BYTE bidir_now;
BYTE error_final;
);

en C hay que declarar todas las variables de una función antes de cualquier código, por lo que el compilador se queja.

 
btbass escribió:

Pruebe esto:if ((pcfg_temp! = 0x07) & & (pcfg_temp! = 0x0D) & & (pcfg_temp! = 0x04) & & (pcfg_temp! = 0x02))

(

hacer algo;

)

 
por supuesto estoy de acuerdo, pero él no había definido las constantes.
# define no es tan buena en estos días?
Mejor es:

const unsigned char LAMP_ON = 0x07;

 
btbass escribió:

por supuesto estoy de acuerdo, pero él no había definido las constantes.

# define no es tan buena en estos días?

Mejor es:const unsigned char LAMP_ON = 0x07;
 
Tengo una solución que se complace a todos ustedes:

enum uso ...

¿por qué ...?

sencillo:

Enumeraciones proporcionan una manera conveniente de asociar valores constantes con nombres, una alternativa a # define con la ventaja de que los valores pueden ser generados por usted.Aunque las variables de tipos enum pueden ser declaradas,
los compiladores no necesitan comprobar que lo que usted guarde en dicha variable es un valor válido para el
la enumeración.Sin embargo, las variables de enumeración ofrecen la posibilidad de comprobar y por lo tanto son a menudo mejor
que # define.Además, un depurador puede ser capaz de imprimir los valores de las variables de enumeración en su

enum (escapa BELL = '\ a', RETROCESO = '\ b', TAB = '\ t',
NEWLINE = '\ n', VTAB = '\ v', RETORNO = '\ r');
forma simbólica.

 
manitooo escribió:

Enumeraciones proporcionan una manera conveniente de asociar valores constantes con nombres, una alternativa a # define con la ventaja de que los valores pueden ser generados por usted.
 
Embebido en C debe usar # define NOMBRE
const asignará memoria para que en su memoria del programa y la mayoría no tienen LC de adjudicar el espacio!
# define mediante el preprocesador sustituirá el valor antes de compilar de manera que en realidad es el mismo que el escrito con el valor.Pero es un poco más claro.

Creo que
la enum se manejan de la misma manera como se define, pero no
estoy seguro acerca de eso.

const puede ser bueno en C , pero el poder de la construcción no es en la definición de las constantes, pero en la definición de las funciones miembro const, const iteradores, ...

Antharax

 
emum tipos por lo general se definen como entero (2 bytes de longitud!) Si utiliza # define
la puede definir de un solo byte constantes.Es muy importante, cuando se tiene de 8 bits con controlador de memoria pequeña.

 
La razón por la que sugirió const es que cuando lo hace con el análisis estático de pelusa o utilizar un depurador y,
a continuación, verá el nombre const.
Si utiliza # define, que acaba de ver el número de sentido.
Si la memoria es un problema, use # define.
Si usted hace el análisis o el uso de un depurador, utiliza const.

 

Welcome to EDABoard.com

Sponsor

Back
Top