[elektro] Munka (C kérdés)
hg12345
hg12345 at freemail.hu
Sun Sep 18 08:45:42 CEST 2011
Hi
ugyan az eredeti kiírás nem igy nézet ki, mert uin16_t váltzó foglalás.
De szerintem a C-nek teljesen mindegy intxx_t vagy uintxx_t incrementál,
hiba üzenet nélkül fog signed változó esetén átlépni 0x7fff -> 0x8000-re!
De a signed/unsigned esetben csak az összehasonlításokban különböznek, meg az ezek elökészítésében való elöjel kiterjesztésben.
Amít itt irsz biztos az a legtömörebb megoldás mert ugyan úgy 0xffff-ig számol, és csak 3 utasításból megoldja, de késöbb máshol felhasználva a castolást el kell végezni..
,
Info <info at kiralyelektronika.hu> írta:
>> 0x08004FEA 8912 LDRH r2,[r2,#0x08] ;// félszó beolvasás>
>
Ha LDRSH lenne akkor lenne sign extend, így nem helyes.>
Viszont ha int-nek írod akkor meg nem biztos, hogy fogja növelni 32767>
fölé. Tehát a count++ -helyett uint16_t(count)++ kellene.>
>
szal ezt:>
int16_t count;>
if (~count) uint16_t(count)++;>
>
már így kéne fordítaia:>
LDRSH r2,[xxx]>
MVNS r2,r2>
BEQ xxxxxx>
>
>
>
>>Nem pont fordítva, hogy csak egyszer végez csak növelést, amikor count==0?>>
de, bocsi :)>
>
>
----------------------------------------->
elektro[-flame|-etc]>
More information about the Elektro
mailing list