Součet v C

Snail Instruments snail
Středa Březen 17 14:26:37 CET 2004


>1)
>ADRES a pole  U_Bat_Buf[2] je d?lky 8 bit? unsigned
>U_Bat_Prum je 16 bit? unsigned.
>U_Bat_Prum=U_Bat_Buf[0]+ADRES; 
>Tento ??dek CCX5 nepo??t? korektn?, v?sledek je dlouh? pouze 8 bit?.

Jsou tu nepochybne vetsi experti na C, ale rekl bych, ze toto je spravne. Oba operandy jsou unsigned char, vysledek je take unsigned char. Kdyz ho ukladate do unsigned int, mel by se pritom snulovat vyssi byte, ale prenos je jednou provzdy ztracen.

>Kdy? uprav?m pole U_Bat_Buf[2] na uns16 u? to po??t? spr?vn?. 
>Znamen? to ale zpomalen? v?po?tu, del?? program a v?ce RAM. Nelze to 
>ud?lat n?jak jinak?

A co jenom pretypovat : U_Bat_Prum=(uns16)U_Bat_Buf[0] + (uns16)ADRES;

>2)
>  U_Bat_Prum=U_Bat_Buf[0]+ADRES+25; se mu nel?b?

CC5x neni ANSI C, projdete si manual. Aritemeticke vyrazy jsou omezeny na jednu operaci, muze byt kombinovana pre/postinkrementem, nejakou dereferenci, ale komplexni vyrazy je treba rozlozit.

J. Hanzal





Další informace o konferenci Hw-list