[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