Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Problem z konfiguracją Eclipse

fazolek 05 Wrz 2009 14:02 3159 5
  • #1 05 Wrz 2009 14:02
    fazolek
    Poziom 12  

    witam.
    Rozpoczynam przygodę z armami at91sam7.
    Zainstalowałem eclipse z płytki jaką dostałem z programatorem arm-usb-ocd (openocd był już skompilowany). Przy wsparciu o materiały ze stronki : http://www.freddiechopin.info/index.php/pl/artykuy/35-arm/59-arm-toolchain-tutorial
    zainstalowałem armtoolchain CodeSourcery, uruchomiłem debugger no i przyznam wszystko działa ładnie pięknie. Debuguje się, programuje ... Mam tylko jeden problem, mianowicie kompilator nie rozumie linijki.

    Code:

    #include <stdio.h>

    Nie bardzo wiem jak to obejść.

    0 5
  • #2 05 Wrz 2009 15:18
    p_piotr
    Poziom 11  

    Co to znaczy "kompilator nie rozumie"? Wszystko się kompiluje, tak?

    0
  • #3 05 Wrz 2009 15:48
    fazolek
    Poziom 12  

    Dziwne to jest. W danej linijce jest znak zapytania żółty i jak się najedzie to napisze: Unresolved inclusion: <stdio.h>. Ale program się skompiluje.
    Tak się dzieje z każdą biblioteką dołączaną poprzez <....>.
    W project->properties->c/c++ general->patchs & symbols pojawiła się nowa zakładka INCLUDES jakimś cudem (możliwe, że po wszystkich konfiguracjach zrestartowałem kompa i to było wynikiem pojawienia się jej). Tam dodałem ścieżkę C:\Program Files\CodeSourcery\Sourcery G++ Lite\arm-none-eabi\include\c++\4.3.3 .
    Już mi się udało uruchomić strncpy(). Stąd kolejne pytanie czy jest tutaj jakaś funkcja do zamiany strumienia żeby odpalić printf() ? Coś na wzór fdevopen z avrgcc.

    0
  • Pomocny post
    #4 05 Wrz 2009 16:36
    p_piotr
    Poziom 11  

    No tak, po prostu Eclipse analizując kod mógł nie widzieć tych headerów, ale to nie ma wpływu na kompilację. Tu jest tak, że kompilator swoją drogą, Eclipse swoją.
    Tak, da się uruchomić printfa(). Ale za bardzo się mądrzył nie będę, bo przy okazji próbowałem to zrobić i napotkałem problemy:). Tak czy owak potrzeba dołączyć kilka funkcji. W jakiś przykładowych projektach poszukaj plików co się zwą syscalls.c, które zawierają potrzebne funkcje i wyrzucają komunikaty na seriala. Na elektrodzie ten temat był poruszany.
    Teraz na szybko wyszukałem coś takiego : http://svn.openpcd.org/trunk/firmware/src/os/syscalls.c. Ja używam czegoś podobnego. Z tym, że u mnie jest tak, że sie kompiluje, ale nie działa. Zauważyłem, że występuje jakiś problem ze stosem przy wywoływaniu funkcji ze zmienną liczbą argumentów, którego jeszcze nie rozwiązałem:).
    Ostrzegam tylko, że korzystanie z newlibowego printf'a znacznie może zwiększyć rozmiar kodu wynikowego. Znalazłem też takiego uproszczonego printf'a pod http://www.sparetimelabs.com/tinyprintf/index.html, ale ze względu na te moje tajemnicze problemy ze stostem to też u mnie nie działa.
    Ale może u Ciebie zadziała:).
    Pozdrawiam.

    0
  • #5 05 Wrz 2009 17:50
    fazolek
    Poziom 12  

    Nie lubie jak jest pod górke. Na szybko wymyśliłem obejście :D

    Code:

    sprintf(message,"\n\r HH:MM:SS");
        USART0_print(message);
        sprintf(message," %d:%d:%d" ,g,m,s);

    Jak przyjdą większe chęci to spróbuje przeskoczyć problem z printf() ale obawiam się, że prędko to nie będzie ;)
    W każdym razie dzięki za pomoc wiem już gdzie i czego szukać.

    0
  • #6 05 Wrz 2009 19:10
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Printf zajmuje z 15kB, więc używanie tego mija się z celem...

    Przekierowanie strumieni jest proste, printf dla każdego ciągu wywołuje funkcję _write_r, którą trzeba zdefiniować samemu. Wystarczy żeby funkcja ta pisała do wybranego interfejsu.

    Tutaj nawet jest przykład, tyle że zakomentowany

    http://yagarto.de/download/yagarto/syscalls.c

    4\/3!!

    0
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo