C podozrenie na bug compilera

nesvacil@posys.cz nesvacil na posys.eu
Středa Únor 27 17:13:43 CET 2013


Viz nize, cele se to poslat neda. Rekl byz se se vyuziva nejaka instrukce na prevod do 16 bitoveho cisla z 8bitoveho s pretecenim, ale tohle by kompilator generovat nemel. To je domenka, dal jsem to nezkoumal ....
Jirka


u16 GUI_GetCharSleepOpt(GUI_Context * ctx,u16 ms,u8 printZnak)
{
     u16 key1=0;
     u16 pozicex=ctx->x;
     u16 pozicey=ctx->y;
     u16 cekani_kurs=0;
     u8 kurs_zobrazen=0;
     for(u16 cekamms=0;ms == 0 || cekamms < ms;cekamms+=10)
     {
         //BUG v prekladaci, prime prirazeni do u16 promenne priradi obcas 256 misto 0, proto nejdrive do u8
         u8 key2=i2c_read_key();
         key1=key2;

Puvodne s BUG
u16 GUI_GetCharSleepOpt(GUI_Context * ctx,u16 ms,u8 printZnak)
{
     u16 key1=0;
     u16 pozicex=ctx->x;
     u16 pozicey=ctx->y;
     u16 cekani_kurs=0;
     u8 kurs_zobrazen=0;
     for(u16 cekamms=0;ms == 0 || cekamms < ms;cekamms+=10)
     {
         key1=i2c_read_key(); // V key1 je obcas hodnota +256, kdyz prejde cekamms pres 255


-- 
Pěkný den

Ing. Jiří Nesvačil

POSYS, spol. s r.o.
www:  http://www.posys.eu
tel:     +420 491 613 625
mobil: +420 603 449 858
mailto:nesvacil na posys.eu

Dne 27. 2. 2013 16:50, Josef Štengl napsal(a):
> Můžete poslat celou funkci?
>
> ced
>
> Dne 27.2.2013 16:45, nesvacil na posys.cz napsal(a):
>> Jinak doplnim v 4.7.2 32bit x86 GCC bez optimalizaci.
>> Jirka
>>
>> Dne 27. 2. 2013 16:35, nesvacil na posys.cz napsal(a):
>>> V GCC na x86, ted nevim v kterem. Po predchozim preteceni 8bitoveho
>>> cisla na 16bitove (naprikald cyklus for od 1 do 65535) se s
>>> nasledujicim prirazenim 8 bitoveho udaje do 16 bitove promenne pricte
>>> hodnota 256. Taky nevim, zda to je na vsech platformach, ... ale pekne
>>> tenhle BUG potrapi ... .
>>>
>>> Jirka
>>>
>>>
>>> Dne 27. 2. 2013 16:13, Jan Waclawek napsal(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
>>
>> _______________________________________________
>> 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