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

[Tiny25][Code::Blocks] - gcc-avr, linux i błędy kompilacji

machacz102 13 Paź 2015 20:22 1170 6
  • #1 15064789
    machacz102
    Poziom 15  
    Witam, mam problem z prawidłowym skompilowaniem programu.

    Środowisko Code::Blocks na aktualnym Xubuntu.

    Kod: Bash
    Zaloguj się, aby zobaczyć kod


    Program z pustą pętlą while kompiluje się i wgrywa w proca bez problemu (avrdude, USBasp), dlatego pomijam opis programowania. Problem zaczyna się przy funkcjach opóźniających. Kod zapewne Panowie rozpoznają, klasyczny blink z pewnej popularnej polskiej strony, z poprawionymi pod Tiny25 pinami:

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


    Tak wygląda log z kompilacji (wykonywane polecenia):

    Kod: Bash
    Zaloguj się, aby zobaczyć kod


    F_CPU jak widać mam zdefiniowane bezpośrednio przy kompilatorze, optymalizację mu włączyłem tak jak chciał, nie używam _delay_xx ze zmienną. Prawdopodobnie pomijam jakiś szczegół, jednak szybkie googlanie wskazuje jedynie powyższe możliwości. Zastanawia mnie, co to jest to __ticks_dc, które występuje we wskazanej przez kompilator linijce.

    Na życie zarabiam pisaniem w językach interpretowanych, C nieco tylko liznąłem na studiach, mikrokontrolerów nie programowałem nigdy. Z Linuxem jestem obyty.

    Eclipse to dla mnie ostateczność. Od dawna staram się przed nim uciekać kiedy tylko mogę, i wolałbym uniknąć przesiadki. Windows nie wchodzi w grę.

    Będę wdzięczny za zasugerowanie przyczyny problemu.
  • Pomocny post
    #3 15065733
    uzi18
    Poziom 24  
    tak jak kolega napisal, dopisz na poczatku programu:

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


    Co nie zmienia faktu ze jest to conajmniej dziwne, bo kompilator marudzi ze chce miec tam stałą i ma ...

    OK, a sprobuj zmienic optymalizacje na -Os ,... wszystko jasne - budujesz Debug a nie Release ... zmien w ustawieniach projektu
  • #4 15065999
    machacz102
    Poziom 15  
    Panowie dzięki, sprawdzę zaraz po powrocie do domu i dam znać... Muszę również doczytać czym się różni debug od release.
  • #6 15066357
    tronics
    Poziom 38  
    @U.P. - akurat tutaj jest kwestia taka:
    debug build - zdefiniowany symbol DEBUG, optimization none i debugging level -g2
    release build - zdefiniowany symbol NDEBUG optimization -Os i debugging level none
    Nic nie stoi na przeszkodzie by w Debug Build sobie dać optimization np. -O3, z tym, że mogą się pojawić problemy stricte związane z włączoną optymalizacją ;) Czyli jest to takie używanie narzędzia nie tak jak trzeba. Innymi słowy dla AVR wersja debug korzystająca choćby z jakiegokolwiek _delay_XX będzie się pluła o brak optymalizacji ;) Poza tymi w/w nie ma żadnych różnic między buildem release a debug - ja domyślnie i tak używam debug :)
  • #7 15067437
    machacz102
    Poziom 15  
    Dzięki Panowie, wyłączenie budowania Debuga załatwiło sprawę - a mnie, jak widzę, czeka zawarcie dogłębnej znajomości z kompilatorem C. Temat uważam za zamknięty, do zobaczenia przy jakimś zegarze, sterowniku do kotła CO czy innej spawarce.
REKLAMA