<html><body>Jo jo to je asi jako kdyz si clovek veme signed promenou, ulozi ji do unsigned,<div>a pak ji pri vypisu opet pretypuje na signed. Vsechno chodi dokud clovek neudela</div><div>nejakou operaci, ktera to dozene do zapornych cisel to se pak dejou veci, hlavne</div><div>++ a -- na hrane rozsahu, tak jsem to ladil asi pul dne nez mi to doslo, tohle vypada</div><div>dost podobne :-D</div><div><br></div><div>Zdenek Aster<br><p>---------- Původní zpráva ----------<br>Od: Jan Waclawek &lt;konfera@efton.sk&gt;<br>Datum: 27. 2. 2013<br>Předmět: Re: C podozrenie na bug compilera</p><br><blockquote>V tom disassembleri nevidim ziadny zasadnejsi problem; samozrejme zalezi na<br>hodnote stack pointra (co zrejme ukazuje na zaciatok predtym vytvoreneho<br>stack frame) a registra r4 (ktory zase zrejme ukazuje na pole buf[]); ale<br>silne pochybujem, ze by tam bol nejaky problem.<br><br>Skor verim tomu, ze kecia nastroj, ktorym to pozerate, ci je to uz<br>simulator alebo nejaky iny debugger. Skuste nejaku nezavislu metodu -<br>poslat hodnotu premennej cez seriak do PC, vypisat ho na nejaky pripojeny<br>displej, alebo take nieco.<br><br>wek<br><br><br>----- Original Message ---------------<br><br>&gt;Keil MDK470a<br>&gt;    uint16_t radress, rquantity;<br>&gt;<br>&gt;    buf[0] = 0x87;<br>&gt;    buf[1] = 0x65;<br>&gt;    buf[2] = 0x43;<br>&gt;    buf[3] = 0x21;<br>&gt;    radress = (uint16_t)buf[0] &lt;&lt; 8;<br>&gt;    radress |= buf[1];<br>&gt;    rquantity = (uint16_t)buf[2] &lt;&lt; 8;<br>&gt;    rquantity |= buf[3];<br>&gt;<br>&gt;prelozil ako:<br>&gt;   382:         buf[0] = 0x87;<br>&gt;0x08000B82 2087      MOVS     r0,#0x87<br>&gt;0x08000B84 7020      STRB     r0,[r4,#0x00]<br>&gt;   383:         buf[1] = 0x65;<br>&gt;0x08000B86 2065      MOVS     r0,#0x65<br>&gt;0x08000B88 7060      STRB     r0,[r4,#0x01]<br>&gt;   384:         buf[2] = 0x43;<br>&gt;0x08000B8A 2043      MOVS     r0,#0x43<br>&gt;0x08000B8C 70A0      STRB     r0,[r4,#0x02]<br>&gt;   385:         buf[3] = 0x21;<br>&gt;0x08000B8E 2021      MOVS     r0,#0x21<br>&gt;0x08000B90 70E0      STRB     r0,[r4,#0x03]<br>&gt;   386:         radress = (uint16_t)buf[0] &lt;&lt; 8;<br>&gt;0x08000B92 7820      LDRB     r0,[r4,#0x00]<br>&gt;0x08000B94 0200      LSLS     r0,r0,#8<br>&gt;0x08000B96 9003      STR      r0,[sp,#0x0C]<br>&gt;   387:         radress |= buf[1];<br>&gt;0x08000B98 7860      LDRB     r0,[r4,#0x01]<br>&gt;0x08000B9A 9903      LDR      r1,[sp,#0x0C]<br>&gt;0x08000B9C 4308      ORRS     r0,r0,r1<br>&gt;0x08000B9E 9003      STR      r0,[sp,#0x0C]<br>&gt;   388:         rquantity = (uint16_t)buf[2] &lt;&lt; 8;<br>&gt;0x08000BA0 78A0      LDRB     r0,[r4,#0x02]<br>&gt;0x08000BA2 0205      LSLS     r5,r0,#8<br>&gt;   389:         rquantity |= buf[3];<br>&gt;0x08000BA4 78E0      LDRB     r0,[r4,#0x03]<br>&gt;0x08000BA6 4305      ORRS     r5,r5,r0<br>&gt;<br>&gt;rquantity je OK, radress hodnota 0x0001<br>&gt;MCU core cortex M0<br>&gt;<br>&gt;Jan Waclawek  wrote / napísal(a):<br>&gt;&gt; Aky kompilator, aka verzia, ake su command-line options, ako vyzera<br>&gt;&gt; disassembly funkcie?<br>&gt;&gt;<br>&gt;&gt; wek<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt; ----- Original Message ---------------<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;   <br>&gt;&gt;&gt; Zdravim konferenci, mam nasledovny problem:<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; void funkcia (uint8_t *buf, uint8_t len, uint32_t *coils){<br>&gt;&gt;&gt;    uint16_t radr;<br>&gt;&gt;&gt;    radr = buf[0];<br>&gt;&gt;&gt;    ...<br>&gt;&gt;&gt; }<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; A v debuggeri do radr priradi 0x0102, cize 16bit cislo. Optimalizacie su <br>&gt;&gt;&gt; vypnute a priznam sa, nechapem.<br>&gt;&gt;&gt; Ako je nieco take vobec mozne?<br>&gt;&gt;&gt;     <br>&gt;&gt;<br><br>_______________________________________________<br>HW-list mailing list  -  sponsored by www.HW.cz<br>Hw-list@list.hw.cz<br>http://list.hw.cz/mailman/listinfo/hw-list</blockquote></div></body></html>