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

Funkcja f1() w pętli, f2() nie działa - Eclipse, Atmega128, AVR toolchain

mr.Sławek 30 Kwi 2017 13:50 816 5
REKLAMA
  • #1 16445996
    mr.Sławek
    Poziom 32  
    Witajcie,
    Naprawdę już nie wiem o co chodzi a walczę z tym od rana. Najprostszy kod:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Problem jest, że funkcja f1() wykowykonuje się w pętli, a f2() nie wykonuje się nigdy. Program blokuje się przy wywołaniu tej pierwszej. Nie ma znaczenia czy posiada ciało czy nie. Zmienimy kolejność to znowu f1() się nie wykona. Korzystam z Eclipse i AVR toolchaina. Taka sytuacja występuje dla Atmegi 128 i np. 103 (tyle mam na stanie), natomiast dla Atmegi16, Atmegi8 ten sam kod działa prawidłowo. Ma ktoś jakieś pomysły bo mi już ręce opadają. Czy to mój błąd? Pod Atmege128 co prawda nigdy nie pisałem, ale sytuacja jest dla mnie jest naprawdę niezrozumiała a czas goni.

    Pozdrawiam
  • REKLAMA
  • #2 16446018
    excray
    Poziom 41  
    Gdybyś załączył zawartość tych funkcji, to pewnie moglibyśmy coś pomóc. W tej sytuacji to jedyne co możemy to podtrzymywać Cię na duchu. Nie poddawaj się, walcz dalej! Swoją drogą, przy takiej konstrukcji programu bez sensu jest wydzielać funkcje f1 i f2 poza main.
  • REKLAMA
  • REKLAMA
  • #4 16446054
    mr.Sławek
    Poziom 32  
    Jasne, niestety ciało funkcji nie ma znaczenia. Po prostu pierwsza funkcja chodzi jakby miała pętlę nieskończoną w ostatniej linijce. Możemy mieć coś takiego:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Już uprościłem kod całkowicie szukając błędów. To co wyżej po prostu u mnie nie zadziała na Atmega128 czy Atmega103. Jest to błąd tylko nie mogę dojść gdzie. Nie mogę zrobić debuga, bo może sprawa by się rozjaśniła. Oczywiście optymalizacja lub jej brak nie daje absolutnie nic. Czuję się kompletnie bezradny, albo już za długo siedzę nad kodem i nie widzę najprostszych błędów?.[/center][/u]
  • REKLAMA
  • #5 16446056
    excray
    Poziom 41  
    Za while(1) brakuje średnika i return(0), które nie powinno się nigdy wykonać, wykonuje się.
  • #6 16446068
    mr.Sławek
    Poziom 32  
    tmf napisał:
    @mr.Sławek A fusebit kompatybilności z M103 wyłączyłeś?

    Właśnie! I to jest rozwiązanie!
    Dzięki wielkie.

    Dodano po 3 [minuty]:

    excray napisał:
    Za while(1) brakuje średnika i return(0), które nie powinno się nigdy wykonać, wykonuje się.

    Oczywiście, gdzieś zginęły przy edycji.

    Rzeczywiście u mnie ta kompatybilność była ustawiona domyślnie. Nie wpadłbym chyba na to dziś. Zapamiętam na przyszłość.
    Dziękuję i pozdrawiam.
REKLAMA