dziwne zachowanie WINAVR czyli AVR-GCC

Loading thread data ...

jak zadeklarowales DELAY?

j.

Reply to
Jacek R. Radzikowski

Piter wrote: ...

A podglądałeś wygenerowany kod? IMHO ta pętla jest przez kompilator zupełnie usuwana (co jest zgodne z dokumentacją).

BTW> dlaczego nie używasz gotowych funkcji _delay_loop_1 lub _delay_loop_2

Pozdrawiam,

Reply to
Artur Lipowski

zadelkaruj DELAY jako volatile unsigned int. To powinno powstrzymac kompilator od nadmiernej optymalizacji

j.

Reply to
Jacek R. Radzikowski

A dlaczego nie, przecież z punktu widzenia kompilatora nic sensownego nie robi oprócz zmieniania wartości jakiejś zmiennej, która jest dalej nie używana (i nie jest volatile). Kuknij do dokumentacji GCC opisującej co może zrobic kompilator na poszczególnych poziomach optymalizacji.

Przyzwyczaj się też, że oglądanie wyprodukowanego assemblera będzie normalną praktyką (avr-objdump twoim przyjacielem 8-).

Jak to mówią - najlepiej się uczyć na cudzych błędach 8-) Twój problem (plus jego odmiana z "niewidzeniem" zmian wykonanych przez obsługę przerwania w wartosci zmiennych globalnych) pojawia się średnio raz na tydzień na forum AVR-GCC na AVRFreaks. Tak zwany "problem" volatile występuje równiez jako FAQ #1 w dokumentacji avr-libc.

Pozdrawiam,

Reply to
Artur Lipowski

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.