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

[Atmega64/Eclipse] Program nie powraca po wywołaniu funkcji

lycon5 18 Lut 2017 11:37 777 4
REKLAMA
  • #1 16287597
    lycon5
    Poziom 11  
    Witam Szanowną Społeczność,

    problem z którym spotykam się po raz pierwszy jest dziwny i upierdliwy. Otóż mam programik który napisałem jakiś czas temu i wszystko było ok. Powróciłem do niego i okazało się, że program nie zachowuje tak samo jak wcześniej. Małe dochodzenie i okazało się, że program wiesza się przy powracaniu z wywołanej funkcji. Tzn. ciało funkcji jest wykonywane ale nie kontynuuje już niczego co jest po jej wywołaniu.

    Prosty programik testów
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    W tym przypadku program ustawi wyjście na Hi ale już nie będzie taktował wyjścia. Rozwiązaniem jest ustawienie funkcji jako inline lub nie odwoływanie się do IO w ciele funkcji. Wtedy funkcja przechodzi ale to dla mnie nie jest rozwiązanie. Docelowy program jest mocno rozbudowany i nie ma możliwości dostosowania go w ten sposób. Podejrzewam, że to kwestia ustawień linkera lub coś w tym rodzaju. Ten program wcześniej działał na tej samej płytce.

    Miał ktoś podobny problem ?

    PS: Testy wykonywałem na dwóch identycznych płytkach.
  • REKLAMA
  • #2 16287645
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #3 16287678
    adix16
    Poziom 9  
    Kolego tak jak wyżekj Piotrek pisze przyjrzyj się stosowi miałem podobnie przy jednym projekcie.
  • REKLAMA
  • Pomocny post
    #4 16287697
    tmf
    VIP Zasłużony dla elektroda
    @lycon5 Zmień ustawienia fusebitu M103C - MCU jest sprzedawany z zaprogramowanym fusebitem, co zmienia działanie na tryb kompatybilności z ATMega103 - w efekcie stos jest ustawiany na nieistniejącą pamięć RAM jeśli używasz M64.
  • #5 16287858
    lycon5
    Poziom 11  
    Szanowny kolego @tmf,

    Twoje rozwiązanie okazało się być strzałem w dziesiątkę. Usunięcie bitu zgodności z Atmega103 rozwiązało problem :)

    Dziękuję za szybką pomoc !
REKLAMA