Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[STM32][FreeRTOS][Eclipse] - Uruchomienie FreeRTOS na zestawie HyMini

ploteklotek 04 Lis 2012 20:20 3477 5
  • #1 04 Lis 2012 20:20
    ploteklotek
    Poziom 10  

    Od kilku dni próbuję uruchomić FreeRTOS i zamigać diodami na zestawie Hymini z procesorem STM32F103VCT6. Używam Eclipse Juno oraz Sourcery G++ Lite 4.6.3. Projekt kompiluje się poprawnie.
    Wcześniej program zatrzymywał się na przerwaniu HardFault_Handler.

    W pliku FreeRTOSConfig.h dodałem więc linie

    Code:
    #define vPortSVCHandler      SVC_Handler
    
    #define xPortPendSVHandler   PendSV_Handler
    #define xPortSysTickHandler  SysTick_Handler



    Program zatrzymuje się teraz na funkcji static void prvPortStartFirstTask( void ) i tego już nie wiem jak ruszyć. Byłbym wdzięczny za naprowadzenie na jakiś trop.

    W załączniku przedstawiam swój projekt.

    0 5
  • #2 04 Lis 2012 22:30
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Sprawa wielokrotnie poruszana. Jak zajrzysz do skryptu linkera, to znajdziesz tam takie coś:

    Cytat:
    /*
    +=============================================================================+
    | stacks sizes
    +=============================================================================+
    */

    /* Handler mode (core exceptions / interrupts) can use only main stack */
    /* Thread mode can use main stack (default) or process stack - selected in CONTROL special register */

    __main_stack_size = 0;
    __process_stack_size = 1024;


    Dla uproszczenia sprawy pozbyłbym się SPLa (; . Do "czystego" przykładu na którym bazowałeś wystarczy dodać FreeRTOSa (z tymi trzema definicjami które podałeś powyżej) i przerzucić miganie diodą do taska (zamiast w pętli głównej). I takie coś na pewno działa (z odpowiednimi rozmiarami stosów oczywiście) (;

    4\/3!!

    0
  • #3 05 Lis 2012 18:15
    ploteklotek
    Poziom 10  

    Dzięki. Diody migają :).
    Jeszcze trochę offtop. W jaki sposób zlikwidować w Eclipse ostrzeżenie o niezdefiniowanych stałych?
    Mam dołączony w main.c nagłówek stm32f10x.h, który ma w sobie odwołanie do stm32f10x_conf.h, a w nim do potrzebnych nagłówków :).
    Eclipse cały czas podkreśla mi niektóre stałe i pokazuje ostrzeżenie, np.

    Code:
    Symbol SysTick_CLKSource_HCLK could not be resolved 
    Przecież plik misc.h, w którym jest ta stała zdefiniowana jest pośrednio dołączony. Jeżeli plik misc.h dam w nagłówku w main.c bezpośrednio ostrzeżenie znika.

    0
  • #4 05 Lis 2012 18:43
    michalko12
    Specjalista - Mikrokontrolery

    do Project->Properties->C/C++ General->Includes dodać wszystkie ścieżki z nagłówkami. Potem jeszcze w razie czego można wymusić indeksowanie PPM na nazwie projektu->Index->Rebuild

    0
  • #5 05 Lis 2012 19:34
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Niczego nie trzeba dodawać na sztywno, Eclipse potrafi sobie wszystko znaleźć sam. Zaimportuj przykład i zobacz jak tam są zrobione ustawienia "Discovery options" w opcjach projektu. Czasem za pierwszym razem Eclipse jest trochę oporny i wtedy trzeba go zmusić do pomyślenia przez chwilę - opis sposobu jest tutaj:
    http://www.freddiechopin.info/pl/artykuly/35-...tm32f10x-standard-peripherals-library?start=4

    4\/3!!

    0
  • #6 17 Lis 2012 10:01
    ploteklotek
    Poziom 10  

    Jednak chyba się przeliczyłem.
    Ustawiłem w pliku skryptu linkera

    Code:
    __main_stack_size = 1024; 
    
    __process_stack_size = 2048;

    W pliku FreeRTOSConfig.h
    Code:
    #define configMINIMAL_STACK_SIZE   ( ( unsigned short ) 128 )
    
    #define configTOTAL_HEAP_SIZE      ( ( size_t ) ( 2 * 1024 ) )


    Po zaprogramowaniu i uruchomieniu debbuggera (prawie Segger z allegro), wchodzi w HardFault_Handler lub utyka na prvPortStartFirstTask()
    Program z odłączonym debuggerem działa i diody migają.

    Edit:
    Po użyciu sterownika WinUSB zgodnie z instrukcją z openocd-0.6.1 i użyciu openocd, debugowanie działa (przynajmniej narazie).

    0