Witam,
Podczas pisania programu wykorzystywanego w projekcie natknąłem się na niespotkany przeze mnie wcześniej problem, który próbowałem już rozwikłać samodzielnie przez dłuższy czas. Niestety zarówno poszukiwania w internecie jak i pomoc znajomych były bezowocne.
Problem dotyczy programowania ATmega128A. Otóż zarówno podczas wgrywania programu do mikrokontrolera (ATmega128A) jak i w trybie debuggowania (JTAG) program nie potrafi powrócić z (absolutnie żadnej) funkcji do miejsca, z którego została owa funkcja wywołana. Doszło do tego, iż próbowałem nawet najprostszych programów mających zmienić jedynie stan jednego portu. Przykład tak prostego programu dołączam w załączniku.
Po wywołaniu funkcji "wlacz()" stan portu B jest wysoki, lecz program nie potrafi opuścić już tej funkcji i powrócić do wykonywania następnych czynności (takich jak kolejna zmiana stanu portu na niski). Program zachowuje się tak, jakby nie potrafił pobrać ze stosu adresu miejsca w pamięci, z którego nastąpiło wywołanie funkcji.
Próbowałem wykorzystać programator zgodny z JTAG ICE oraz AVR Dragon. Używałem zarówno AVR Studio w wersji 4 jak i Atmel Studio 6. Dodam, iż pisane programy kompilują się bez przeszkód, avr studio odczytuje mikroprocesor przez JTAG bez problemów, a na symulatorze programy (i funkcje) działają bez przeszkód. Próba debugowania jak i wgrywania programu na inny mikrokontroler (ATmega16) przebiega również bez przeszkód.
Dodam również, iż zmiany zarówno rejestrów jak i stanów portów w "main" jak i w pętli 'while' dokonują się bez najmniejszych przeszkód, problem występuje jedynie przy wywoływaniu funkcji (a dokładniej przy powrocie z nich). Niestety z racji skomplikowania programu (wykonuję sterowanie lampy rehabilitacyjnej z interfejsem w postaci wyświetlacza TFT z panelem dotykowym) nie wyobrażam sobie stworzenia programu bez uwzględnienia funkcji. Czy ktoś może spotkał się z podobnym problemem lub wie na czym może polegać przyczyna (a najlepiej znać rozwiązanie)?
Podczas pisania programu wykorzystywanego w projekcie natknąłem się na niespotkany przeze mnie wcześniej problem, który próbowałem już rozwikłać samodzielnie przez dłuższy czas. Niestety zarówno poszukiwania w internecie jak i pomoc znajomych były bezowocne.
Problem dotyczy programowania ATmega128A. Otóż zarówno podczas wgrywania programu do mikrokontrolera (ATmega128A) jak i w trybie debuggowania (JTAG) program nie potrafi powrócić z (absolutnie żadnej) funkcji do miejsca, z którego została owa funkcja wywołana. Doszło do tego, iż próbowałem nawet najprostszych programów mających zmienić jedynie stan jednego portu. Przykład tak prostego programu dołączam w załączniku.
Kod: C / C++
Po wywołaniu funkcji "wlacz()" stan portu B jest wysoki, lecz program nie potrafi opuścić już tej funkcji i powrócić do wykonywania następnych czynności (takich jak kolejna zmiana stanu portu na niski). Program zachowuje się tak, jakby nie potrafił pobrać ze stosu adresu miejsca w pamięci, z którego nastąpiło wywołanie funkcji.
Próbowałem wykorzystać programator zgodny z JTAG ICE oraz AVR Dragon. Używałem zarówno AVR Studio w wersji 4 jak i Atmel Studio 6. Dodam, iż pisane programy kompilują się bez przeszkód, avr studio odczytuje mikroprocesor przez JTAG bez problemów, a na symulatorze programy (i funkcje) działają bez przeszkód. Próba debugowania jak i wgrywania programu na inny mikrokontroler (ATmega16) przebiega również bez przeszkód.
Dodam również, iż zmiany zarówno rejestrów jak i stanów portów w "main" jak i w pętli 'while' dokonują się bez najmniejszych przeszkód, problem występuje jedynie przy wywoływaniu funkcji (a dokładniej przy powrocie z nich). Niestety z racji skomplikowania programu (wykonuję sterowanie lampy rehabilitacyjnej z interfejsem w postaci wyświetlacza TFT z panelem dotykowym) nie wyobrażam sobie stworzenia programu bez uwzględnienia funkcji. Czy ktoś może spotkał się z podobnym problemem lub wie na czym może polegać przyczyna (a najlepiej znać rozwiązanie)?