Witam walcze z gcc pod AVR (avr-gcc (GCC) 3.4.5), i chyba znalazlem buga gdy mnoze liczbe zzakresu 0-9 (U8) przez stala 10 000, mnozenie dziala poprawnie do rezultatu nie wiekszego niz 30 000. Zmienna jest typu U32, przy unsigned integer, long jest tak samo. Dzialo by sie tak, gdybym zadeklarowal ja jako U16, ale mam U32 wynik mnozenia dla wartosci wiekszych niz 3 jest : FFFFxxxx Co ciekawe mnozenie * 100 000 dziala OK.
oto linsting przy ktorym sa takie jaja: przetwarza on ciag liczb BCD pobranych z klawiatury (input_buffer) na 32bit (input_frequency )
U32 input_frequency ; input_frequency = 0; input_frequency = input_buffer[6] + input_buffer[5] *10 + input_buffer[4]*100 + input_buffer[3]*1000 + input_buffer[2]*10000
+input_buffer[1]*100000;no i on nie dziala poprawnie natomiast jak obejde problem mnozenia przez 10 000 tak:
U32 input_frequency ; input_frequency = 0; for (U8 nr=1; nr< (input_buffer[2]+1); nr++) { input_frequency+=10000; } input_frequency += input_buffer[6] + input_buffer[5] *10 + input_buffer[4]*100 + input_buffer[3]*1000 + input_buffer[1]*100000;
to wszystko jest w porzadku
czy ja czegos nie rozumiem czy to bug?