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

[ATMEGA128]Mikrokontroler zawiesza się w pustej funkcji

Szteker 23 Lis 2010 08:58 1347 12
  • #1 8778626
    Szteker
    Poziom 11  
    Cze,
    //Funkcja
    inline static void spi_init(void)
    {
    return;
    }
    //Program główny
    int main()
    {
    DDRB |= 1<<5;
    PORTB &=~(1<<5);
    spi_init();
    
    while(1)
    PORTB |= 1<<5;
    }


    Sprawdzam stan na porcie PORTB5. Gdy zakomentuje wywołanie funkcji, program działa. Jest stan wysoki na wyjściu.
    W funkcji inicjalizowalem SPI. Program również się zawieszał. Gdy wstawiałem zawartość funkcji do programu głównego wszystko było ok.
    Optymalizacja wyłączona.
  • #2 8778952
    mirekk36
    Poziom 42  
    Po pierwsze włącz optymalizację i zapomnij o jej wyłączaniu a szczególnie na tym etapie znajomości języka C.

    Po drugie napisz kawałek programu, który będzie coś miał robić a nie taki, który ma nic nie robić i się dziwisz że coś ci nie działa.

    Wtedy łatwiej będzie ci pomóc.
  • #3 8779546
    Szteker
    Poziom 11  
    Problem chyba rozwiazany. Załączyłem optymalizacje Os. GCC na AVR jest troche daremne skoro optymalizacja wysypuje program.Analizowałem listing assemblera i wygladalo wszystko ok po załadowaniu do procka juz tak nie było. Assembler na te 8bitowe to chyba jednak znacznie lepsze rozwiazanie.
  • #4 8779595
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Bzdura bzdura bzdura. Optymalizacja nie ma tutaj NIC do rzeczy. GCC nie jest również "daremne" - w 99,666% przypadków błąd tkwi po stronie użytkownika, więc raczej powstrzymaj się od zrzucania winy na kompilator, bo ja mogę się w ciemno założyć, że to nie jego wina.

    4\/3!!
  • #5 8779623
    czmi3l
    Poziom 14  
    A ja jestem gotów dać sobie jaja obciąć, że kolega nie odznaczył fusebita zgodności z ATmega103.

    Dodano po 4 [minuty]:

    Freddie Chopin napisał:
    Bzdura bzdura bzdura. Optymalizacja nie ma tutaj NIC do rzeczy. GCC nie jest również "daremne" - w 99,666% przypadków błąd tkwi po stronie użytkownika, więc raczej powstrzymaj się od zrzucania winy na kompilator, bo ja mogę się w ciemno założyć, że to nie jego wina.

    4\/3!!


    Mam taki przykład gdzie kompilator jest po prostu źle zrobiony. Hitech c compiler dla dspic i pic24. To jest poprostu jeden wielki błąd:

    - jak za dużo switchy w programie to wywala błąd kompilacji - jak zastąpi się else ifami to już nie ma problemów,

    - zmienia zmienne statyczne funkcji pomiędzy wywołaniami funkcji (jeżeli w międzyczasie były wywołane inne f-cje lub przerwania) to jest po prostu masakra! :)
    Happy debuging :)
  • #6 8779762
    gaskoin
    Poziom 38  
    czmi3l napisał:

    - zmienia zmienne statyczne funkcji pomiędzy wywołaniami funkcji (jeżeli w międzyczasie były wywołane inne f-cje lub przerwania) to jest po prostu masakra! :)
    Happy debuging :)


    Gcc od wersji 4.5.0 już z tym problemu nie mają bo faktycznie były błędy ze zmiennymi statycznymi do tej pory

    Do autora: mógłbyś cały program pokazać zamiast głosić herezje ? Kompilator tylko kompiluje to co mu napiszesz, jak napiszesz daremne rzeczy to daremnie działa
  • #7 8779772
    czmi3l
    Poziom 14  
    Jak pisałem wyżej autor na pewno nie odznaczył fusebita zgodności z Atmega103.
    Jak program wskakuje w funkcje i zaczyna ją wykonywać pisze sobie i po stosie i bidula nie ma gdzie wrócić. Ten problem był już na elektrodzie wielokrotnie rozwiązany.

    Gaskoin, ale przecież hitech to nie gcc. Z tego co wiem Microchip poleca używanie gcc zamiast hitecha do piców24 i dspiców.
  • #8 8779798
    gaskoin
    Poziom 38  
    Jak to nie to, to oddawaj jaja.

    W każdym bądź razie gcc też miało z tym troszkę problemy kiedyś
  • #9 8779831
    Konto nie istnieje
    Konto nie istnieje  
  • #11 8780102
    gaskoin
    Poziom 38  
    Taki bug był w gcc 3.4, ale jak się okazuje wynikał z ograniczeń cygwina, mniejsza z tym, pokopałem numery wersji
  • #12 8782486
    Szteker
    Poziom 11  
    Czmi3l dzięki. Stawiam piwo przez jastawiam.pl. Odezwe sie na pw.
    Z GCC wszystko ok. Jeśli kogoś uraziłem stwierdzeniem że GCC jest daremne to przepraszam, mój błąd. Szczególnie przepraszam Freddiego i dziękuje mu za wszystkie merytoryczne wskazówki :).
  • #13 8783088
    Konto nie istnieje
    Konto nie istnieje  
REKLAMA