C podozrenie na bug compilera

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Středa Únor 27 20:55:22 CET 2013


Tak jeste aby to keil za ty prachy neprelozil dobre ;-)

Ale k puvodnimu problemu - chtelo by to ASM po prekladu, co to vlastne 
dela. IMHO to je fakt nejaka chyba.

Dne 27. 2. 2013 20:04, Stano napsal(a):
> 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?
>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list



Další informace o konferenci Hw-list