Witam.
wcześniej w mikrokontrolerach avr korzystałem z assemblera (co pomogło mi dobrze poznać ukłądy "od środka"). Jednak nadszedł czas aby skorzystać z dobrodziejstw języka C (w tym języku pisałem wcześniej programy komputerowe). schody zaczęły się już na początku.
po napisaniu kolejnych fragmentów kodu uruchamiałem symulator żeby zobaczyć czy poprawnie działa, kolejność pisania:
przerwanie CTC timera co 1ms[działa]
next_sec()- działa
ledmux()- działa
dodałem SPI- przestało działać, po instrukcji sei() program skakał do instrukcji spi_buff[0]=0xaa;//enable>>8;
więc zajrzałem do okna disassembly:
jak widać kolejność instrukcji się zmieniła. pomogło na to jedynie ustawienie w opcjach braku optymalizacji. Ale wtedy po kilku wykonaniach pętli while kasowane jest zezwolenie na przerwania (bit I rejestru SREG).
Czy ktoś wie dlaczego tak się dzieje? błąd w kodzie czy to może błędne działanie symulatora?
dodam jeszcze że program miał pełnić funkcję zegara, multipleksowanie na 74hc595.
Korzystam z Atmel studio i wbudowane w niego narzędzia.
Atmel Studio 6 (Version: 6.1.2440 - beta)
Atmel AVR (8 bit) GNU Toolchain - 3.4.2.876
wcześniej w mikrokontrolerach avr korzystałem z assemblera (co pomogło mi dobrze poznać ukłądy "od środka"). Jednak nadszedł czas aby skorzystać z dobrodziejstw języka C (w tym języku pisałem wcześniej programy komputerowe). schody zaczęły się już na początku.
po napisaniu kolejnych fragmentów kodu uruchamiałem symulator żeby zobaczyć czy poprawnie działa, kolejność pisania:
przerwanie CTC timera co 1ms[działa]
next_sec()- działa
ledmux()- działa
dodałem SPI- przestało działać, po instrukcji sei() program skakał do instrukcji spi_buff[0]=0xaa;//enable>>8;
więc zajrzałem do okna disassembly:
![[c/AS6] - debug w symulatorze [c/AS6] - debug w symulatorze](https://obrazki.elektroda.pl/3121135700_1366736432_thumb.jpg)
jak widać kolejność instrukcji się zmieniła. pomogło na to jedynie ustawienie w opcjach braku optymalizacji. Ale wtedy po kilku wykonaniach pętli while kasowane jest zezwolenie na przerwania (bit I rejestru SREG).
Czy ktoś wie dlaczego tak się dzieje? błąd w kodzie czy to może błędne działanie symulatora?
dodam jeszcze że program miał pełnić funkcję zegara, multipleksowanie na 74hc595.
Korzystam z Atmel studio i wbudowane w niego narzędzia.
Atmel Studio 6 (Version: 6.1.2440 - beta)
Atmel AVR (8 bit) GNU Toolchain - 3.4.2.876
Code: c