ugrađen C junior sumnje?

M

mImoto

Guest
Zdravo,

Imam ovaj dva sumnjama i JA dont 'znati gdje svi pronaći odgovor.

Prvo:

Htjela bih da ako pcfg_temp se razlikuje od 0b00000111 ili drugačiji od 0b00001110 ili drugačiji od 0b00000100 ili različite od
0b00000010 onda se nešto dogodi.Imam koristi sljedeće kodiranja, ali nisam siguran.

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

Moje sumnje da je rezultat (0b00000111) | | (0b00001110) | | (0b00000100) | | (0b00000010)) je boolean pa možda to nije ispravan način.Any suggestion?

I drugo:

void funkcija ()
(
sindikata READ_DATA tris_desired;
sindikata READ_DATA tris_now;
sindikata READ_DATA bidir_now;
sindikata READ_DATA tris_final;
sindikata READ_DATA error_final;
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;
....

)

Ako li koristiti ovaj tada kompajler radi ok, ali ako se koristi umjesto->void funkcija ()
(
sindikata READ_DATA tris_desired;
sindikata READ_DATA tris_now;
sindikata READ_DATA bidir_now;
sindikata READ_DATA tris_final;
sindikata READ_DATA error_final;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;
....

)

Kompajler mi govori da tris_temp, itd. nisu proglašeni żwhy?.

Hvala puno unaprijed,

mimoto

 
Try this:

if ((pcfg_temp! = 0x07) & & (pcfg_temp! = 0x0d) & & (pcfg_temp! = 0x04) & & (pcfg_temp! = 0x02))
(
nešto učiniti;
)

ne bi trebali definirati svoj sindikat:

sindikat READ_DATA
(
BYTE tris_desired;
BYTE tris_now;
BYTE bidir_now;
BYTE error_final;
);

u C-morate deklarirati sve varijable u funkciji prije nego bilo koji broj, taj zašto kompajler tužiti.

 
btbass wrote:

Try this:if ((pcfg_temp! = 0x07) & & (pcfg_temp! = 0x0d) & & (pcfg_temp! = 0x04) & & (pcfg_temp! = 0x02))

(

nešto učiniti;

)

 
naravno Slažem se, ali on nije definirano konstante.
# define nije baš ovih dana?
Bolje je:

const unsigned char LAMP_ON = 0x07;

 
btbass wrote:

naravno Slažem se, ali on nije definirano konstante.

# define nije baš ovih dana?

Bolje je:const unsigned char LAMP_ON = 0x07;
 
Imam rješenje koje će biti drago da vas sve:

korištenje enum ...

zašto ...?

jednostavan:

Enumerations osigurati prikladan način povezati konstantne vrijednosti s imenima, alternativa # define uz prednost da vrijednosti mogu biti za vas generirana.Iako su varijable tipa enum svibanj biti proglašen, prevodioce ne treba provjeriti da je ono što pohraniti u takvom varijabla je vrijednost vrijedi za
nabrajanje.Ipak, nabrajanje varijable nude mogućnost provjere i tako su često bolji
od # definira.Osim toga, debugger svibanj biti u mogućnosti ispisati vrijednosti varijabli u popisivanje njihovih

enum escapes ZVONO = ( '\', BACKSPACE = '\ b', TAB = '\ t',
Newline = '\ n', VTAB = '\ v', VRATITE = '\ r');
simboličan oblik.

 
manitooo wrote:

Enumerations osigurati prikladan način povezati konstantne vrijednosti s imenima, alternativa # define uz prednost da vrijednosti mogu biti za vas generirana.
 
U ugrađen C te bi trebao iskoristiti # define IME
const će se alocirati memorija za njega u vašem programu memorije i većina LC nemaju dodijeliti prostor!
pomoću # define preprocesor će zamjena vrijednosti prije nego li sastaviti tako da zapravo to je isto kao što je pisanje i vrijednosti.Ali to je malo više jasno.

Mislim da je enum se postupa na isti način kao i definira, ali Im 'ne siguran o tome.

const može biti dobar u C , ali moć je const nije u definiranje konstanti, ali u definiranju const član funkcije, const iterators, ...

Antharax

 
emum tipovi obično se definira kao cijeli broj (2 bajta!) Ako koristite # define je možete definirati jedan bajt konstante.To je vrlo važno, kad imate 8bit kontroler s malom memorijom.

 
Razlog zbog kojeg sam predložio const je da kad se statičke analize s vlakna ili koristite program za pronalaženje pogrešaka, onda vidite naziv const.
Ako koristite # define, te pravedan vidjeti beznačajan broj.
Ako je memorija je problem, poslužite se # define.
Ako ne statičke analize ili koristite program za pronalaženje pogrešaka, koristite const.

 

Welcome to EDABoard.com

Sponsor

Back
Top