C podozrenie na bug compilera
Jan Waclawek
konfera na efton.sk
Středa Únor 27 22:03:48 CET 2013
V tom disassembleri nevidim ziadny zasadnejsi problem; samozrejme zalezi na
hodnote stack pointra (co zrejme ukazuje na zaciatok predtym vytvoreneho
stack frame) a registra r4 (ktory zase zrejme ukazuje na pole buf[]); ale
silne pochybujem, ze by tam bol nejaky problem.
Skor verim tomu, ze kecia nastroj, ktorym to pozerate, ci je to uz
simulator alebo nejaky iny debugger. Skuste nejaku nezavislu metodu -
poslat hodnotu premennej cez seriak do PC, vypisat ho na nejaky pripojeny
displej, alebo take nieco.
wek
----- Original Message ---------------
>Keil MDK470a
> uint16_t radress, rquantity;
>
> buf[0] = 0x87;
> buf[1] = 0x65;
> buf[2] = 0x43;
> buf[3] = 0x21;
> radress = (uint16_t)buf[0] << 8;
> radress |= buf[1];
> rquantity = (uint16_t)buf[2] << 8;
> rquantity |= buf[3];
>
>prelozil ako:
> 382: buf[0] = 0x87;
>0x08000B82 2087 MOVS r0,#0x87
>0x08000B84 7020 STRB r0,[r4,#0x00]
> 383: buf[1] = 0x65;
>0x08000B86 2065 MOVS r0,#0x65
>0x08000B88 7060 STRB r0,[r4,#0x01]
> 384: buf[2] = 0x43;
>0x08000B8A 2043 MOVS r0,#0x43
>0x08000B8C 70A0 STRB r0,[r4,#0x02]
> 385: buf[3] = 0x21;
>0x08000B8E 2021 MOVS r0,#0x21
>0x08000B90 70E0 STRB r0,[r4,#0x03]
> 386: radress = (uint16_t)buf[0] << 8;
>0x08000B92 7820 LDRB r0,[r4,#0x00]
>0x08000B94 0200 LSLS r0,r0,#8
>0x08000B96 9003 STR r0,[sp,#0x0C]
> 387: radress |= buf[1];
>0x08000B98 7860 LDRB r0,[r4,#0x01]
>0x08000B9A 9903 LDR r1,[sp,#0x0C]
>0x08000B9C 4308 ORRS r0,r0,r1
>0x08000B9E 9003 STR r0,[sp,#0x0C]
> 388: rquantity = (uint16_t)buf[2] << 8;
>0x08000BA0 78A0 LDRB r0,[r4,#0x02]
>0x08000BA2 0205 LSLS r5,r0,#8
> 389: rquantity |= buf[3];
>0x08000BA4 78E0 LDRB r0,[r4,#0x03]
>0x08000BA6 4305 ORRS r5,r5,r0
>
>rquantity je OK, radress hodnota 0x0001
>MCU core cortex M0
>
>Jan Waclawek wrote / napísal(a):
>> Aky kompilator, aka verzia, ake su command-line options, ako vyzera
>> disassembly funkcie?
>>
>> wek
>>
>>
>>
>> ----- Original Message ---------------
>>
>>
>>
>>
>>> Zdravim konferenci, mam nasledovny problem:
>>>
>>> void funkcia (uint8_t *buf, uint8_t len, uint32_t *coils){
>>> uint16_t radr;
>>> radr = buf[0];
>>> ...
>>> }
>>>
>>> A v debuggeri do radr priradi 0x0102, cize 16bit cislo. Optimalizacie su
>>> vypnute a priznam sa, nechapem.
>>> Ako je nieco take vobec mozne?
>>>
>>
Další informace o konferenci Hw-list