logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATmega128A][C] - Dziwny błąd uniemożliwiający opuszczanie funkcji

Kozer23 15 Sty 2014 11:20 945 2
REKLAMA
  • #1 13178840
    Kozer23
    Poziom 2  
    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.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    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)?
  • REKLAMA
  • #2 13178857
    Konto nie istnieje
    Konto nie istnieje  
  • #3 13178872
    Kozer23
    Poziom 2  
    Zakładałem wadliwy egzemplarz ATmegi lub właśnie jakiś źle ustawiony Fusebit, który może mieć na to wpływ. W tym momencie nie mam dostępu do tej atmegi, ale sprawdzę to jak tylko będę mógł i dam znać czy problem rozwiązany. Dzięki za odpowiedź.

    Edit:
    Po szybkim sprawdzeniu okazało się, że wina rzeczywiście była po stronie Fusebita dotyczącego trybu kompatybilności z M103. Bardzo dziękuję za pomoc. Sprawę uważam za zamkniętą.
REKLAMA