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.

Jak uruchomić FreeRTOS na stm32

ka_3 26 Lip 2015 16:18 2148 11
  • #1 26 Lip 2015 16:18
    ka_3
    Poziom 16  

    Próbuję już kilka dni uruchomić ten wspaniały system na stm32f4, korzystam ze środowiska CooCox. Tworzę nowy projekt dodaję z repozytorium potrzebne biblioteki i system FreeRtos.
    plik main.c wygląda tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    A błędów jest co nie miara.
    Code:
    GCC HOME: C:\Program Files (x86)\GNU Tools ARM Embedded\4.9 2014q4\bin
    
    compile:
        [mkdir] Skipping C:\CooCox\CoIDE\workspace\RTOS\rtos\Debug\bin because it already exists.
        [mkdir] Skipping C:\CooCox\CoIDE\workspace\RTOS\rtos\Debug\obj because it already exists.
           [cc] 200
           [cc] Starting dependency analysis for 12 files.
           [cc] Parsing ..\..\..\FRT_Library\FreeRTOS\Source\include\FreeRTOS.h
           [cc] Parsing ..\..\..\FRT_Library\FreeRTOS\Source\include\portable.h
           [cc] Parsing ..\..\..\cmsis_boot\stm32f4xx.h
           [cc] Parsing ..\..\..\cmsis\core_cm4.h
           [cc] Parsing ..\..\..\cmsis_boot\stm32f4xx_conf.h
           [cc] Parsing ..\..\..\cmsis\core_cmInstr.h
           [cc] Parsing ..\..\..\cmsis\core_cmFunc.h
           [cc] Parsing ..\..\..\cmsis\core_cm4_simd.h
           [cc] Parsing ..\..\..\FRT_Library\FreeRTOS\Source\tasks.c
           [cc] Parsing ..\..\..\FRT_Library\FreeRTOS\Source\list.c
           [cc] Parsing ..\..\..\FRT_Library\FreeRTOS\Source\queue.c
           [cc] Parsing ..\..\..\FRT_Library\FreeRTOS\Source\portable\MemMang\heap_2.c
           [cc] 12 files are up to date.
           [cc] 0 files to be recompiled from dependency analysis.
           [cc] arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -Wall -ffunction-sections -g -O0 -c -DSTM32F401VC -DSTM32F4XX -DUSE_STDPERIPH_DRIVER -D__ASSEMBLY__ -IC:\CooCox\CoIDE\workspace\RTOS -IC:\CooCox\CoIDE\workspace\RTOS\FRT_Library\FreeRTOS\Source\include -IC:\CooCox\CoIDE\workspace\RTOS\cmsis_boot -IC:\CooCox\CoIDE\workspace\RTOS\FRT_Library\FreeRTOS\Source\portable\GCC -IC:\CooCox\CoIDE\workspace\RTOS\FRT_Library\FreeRTOS -IC:\CooCox\CoIDE\workspace -IC:\CooCox\CoIDE\workspace\RTOS\FRT_Library\FreeRTOS\Source -IC:\CooCox\CoIDE\workspace\RTOS\FRT_Library\FreeRTOS\Source\portable -IC:\CooCox\CoIDE\workspace\RTOS\cmsis_lib -IC:\CooCox\CoIDE\workspace\RTOS\cmsis_lib\include -IC:\CooCox\CoIDE -IC:\CooCox\CoIDE\workspace\RTOS\cmsis -IC:\CooCox\CoIDE\workspace\RTOS\FRT_Library\FreeRTOS\Source\portable\GCC\ARM_CM3 C:\CooCox\CoIDE\workspace\RTOS\main.c




           [cc] 1 total files to be compiled.
           [cc] In file included from C:\CooCox\CoIDE\workspace\RTOS\main.c:3:0:
           [cc] C:\CooCox\CoIDE\workspace\RTOS\FRT_Library\FreeRTOS\Source\include/task.h:56:3: error: #error "#include FreeRTOS.h" must appear in source files before "#include task.h"
           [cc]   #error "#include FreeRTOS.h" must appear in source files before "#include task.h"
           [cc]    ^
           [cc] C:\CooCox\CoIDE\workspace\RTOS\FRT_Library\FreeRTOS\Source\include/portable.h:349:71: error: unknown type name 'pdTASK_CODE'
           [cc] In file included from C:\CooCox\CoIDE\workspace\RTOS\FRT_Library\FreeRTOS\Source\include/task.h:64:0,
           [cc]                  from C:\CooCox\CoIDE\workspace\RTOS\main.c:3:
           [cc]   portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters );
           [cc]  void *pvPortMalloc( size_t xSize ) PRIVILEGED_FUNCTION;
           [cc] C:\CooCox\CoIDE\workspace\RTOS\FRT_Library\FreeRTOS\Source\include/portable.h:355:21: error: unknown type name 'size_t'
           [cc]                                                                        ^
           [cc]                      ^
           [cc] C:\CooCox\CoIDE\workspace\RTOS\FRT_Library\FreeRTOS\Source\include/portable.h:358:1: error: unknown type name 'size_t'
           [cc]  size_t xPortGetFreeHeapSize( void ) PRIVILEGED_FUNCTION;
           [cc]  ^
           [cc] In file included from C:\CooCox\CoIDE\workspace\RTOS\main.c:3:0:
           [cc] C:\CooCox\CoIDE\workspace\RTOS\FRT_Library\FreeRTOS\Source\include/task.h:113:2: error: unknown type name 'pdTASK_CODE'
           [cc]   pdTASK_CODE pvTaskCode;
           [cc]   ^
           [cc] In file included from C:\CooCox\CoIDE\workspace\RTOS\main.c:3:0:
           [cc] C:\CooCox\CoIDE\workspace\RTOS\FRT_Library\FreeRTOS\Source\include/task.h:1109:53: error: unknown type name 'pdTASK_HOOK_CODE'
           [cc]                                                      ^
           [cc]  void vTaskSetApplicationTaskTag( xTaskHandle xTask, pdTASK_HOOK_CODE pxHookFunction ) PRIVILEGED_FUNCTION;
           [cc] C:\CooCox\CoIDE\workspace\RTOS\FRT_Library\FreeRTOS\Source\include/task.h:1117:1: error: unknown type name 'pdTASK_HOOK_CODE'
           [cc]  pdTASK_HOOK_CODE xTaskGetApplicationTaskTag( xTaskHandle xTask ) PRIVILEGED_FUNCTION;
           [cc]  ^
           [cc] C:\CooCox\CoIDE\workspace\RTOS\FRT_Library\FreeRTOS\Source\include/task.h:1255:42: error: unknown type name 'pdTASK_CODE'
           [cc]  signed portBASE_TYPE xTaskGenericCreate( pdTASK_CODE pvTaskCode, const signed char * const pcName, unsigned short usStackDepth, void *pvParameters, unsigned portBASE_TYPE uxPriority, xTaskHandle *pxCreatedTask, portSTACK_TYPE *puxStackBuffer, const xMemoryRegion * const xRegions ) PRIVILEGED_FUNCTION;
           [cc]                                           ^
           [cc] C:\CooCox\CoIDE\workspace\RTOS\main.c: In function 'main':
           [cc] C:\CooCox\CoIDE\workspace\RTOS\main.c:26:2: warning: implicit declaration of function 'xTaskGenericCreate' [-Wimplicit-function-declaration]
           [cc]   xTaskCreate(task1, ( signed char * ) "task1", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES, NULL);
           [cc]   ^
           [cc] C:\CooCox\CoIDE\workspace\RTOS\main.c:26:74: error: 'NULL' undeclared (first use in this function)
           [cc] In file included from C:\CooCox\CoIDE\workspace\RTOS\main.c:3:0:
           [cc]   xTaskCreate(task1, ( signed char * ) "task1", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES, NULL);
           [cc]                                                                           ^
           [cc] C:\CooCox\CoIDE\workspace\RTOS\FRT_Library\FreeRTOS\Source\include/task.h:272:166: note: in definition of macro 'xTaskCreate'
           [cc]  #define xTaskCreate( pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pxCreatedTask ) xTaskGenericCreate( ( pvTaskCode ), ( pcName ), ( usStackDepth ), ( pvParameters ), ( uxPriority ), ( pxCreatedTask ), ( NULL ), ( NULL ) )
           [cc]                                                                                                                                                                       ^
           [cc] C:\CooCox\CoIDE\workspace\RTOS\main.c:26:74: note: each undeclared identifier is reported only once for each function it appears in
           [cc]   xTaskCreate(task1, ( signed char * ) "task1", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES, NULL);
           [cc]                                                                           ^
           [cc] C:\CooCox\CoIDE\workspace\RTOS\FRT_Library\FreeRTOS\Source\include/task.h:272:166: note: in definition of macro 'xTaskCreate'
           [cc]  #define xTaskCreate( pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pxCreatedTask ) xTaskGenericCreate( ( pvTaskCode ), ( pcName ), ( usStackDepth ), ( pvParameters ), ( uxPriority ), ( pxCreatedTask ), ( NULL ), ( NULL ) )
           [cc]                                                                                                                                                                       ^

    BUILD FAILED
    Total time: 1 second

    Moje pytanie brzmi co robię źle? Jak poprawnie dodać pliki FreeRTOS do projektu, najlepiej w środowsiku CooCox?

    0 11
  • #2 26 Lip 2015 16:23
    grko
    Poziom 32  

    Code:

    error: #error "#include FreeRTOS.h" must appear in source files before "#include task.h"


    To chyba mówi samo za siebie.

    Code:

    error: unknown type name 'size_t'
    error: 'NULL' undeclared (first use in this function)


    brakuje "#include <stddef.h>"

    Z tego co się orientuje to nie powinno się nie powinno załączać bezpośrednio configa FreeRTOSa:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Powinno to być tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #3 26 Lip 2015 16:31
    ka_3
    Poziom 16  

    Dużo lepiej, ale dalej źle.

    Code:

          [cc] C:\CooCox\CoIDE\workspace\RTOS\FRT_Library\FreeRTOS\Source/tasks.c:1390: undefined reference to `vApplicationTickHook'
           [cc] C:\CooCox\CoIDE\workspace\RTOS\FRT_Library\FreeRTOS\Source/tasks.c:1403: undefined reference to `vApplicationTickHook'

    Jakiego pliku brakuje? FreeRTOS dodawałem z repozytorium, ale jak widać czegoś chyba tam brakuje.

    0
  • #5 26 Lip 2015 16:58
    ka_3
    Poziom 16  

    Kompiluje się teraz ładnie, ale diody nie chcą za nic mrugać, tylko się świecą:(
    Z tego co widzę to w repozytorium CooCox jest FreeRTOS 6.1 czyli trochę stary. Jak ręcznie dodać do projektu najnowszy 8.2.1?

    0
  • #6 26 Lip 2015 17:10
    grko
    Poziom 32  

    Stary też powinien działać :) Masz debugger ? Przerwania od systicka działają ?
    Może rdzeń wyłapuje wyjątek (za mały stos przerwań). Trudno powiedzieć...


    Tu jeszcze masz błąd:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Nie powinieneś przekazywać: configMAX_PRIORITIES. Możesz od 0 do configMAX_PRIORITIES - 1.

    0
  • #8 26 Lip 2015 17:23
    ka_3
    Poziom 16  

    Dodałem pętle nieskończone, zmieniłem priorytet na 0, i dalej nic. Przerwania od Systicka też nie działają.

    0
  • #9 26 Lip 2015 19:18
    mi14chal
    Poziom 27  

    Po czym poznajesz że przerwania od Systicka nie działają? Próbowałeś bez FreeRTOSa migać diodkami?

    0
  • #10 26 Lip 2015 19:21
    ka_3
    Poziom 16  

    mi14chal napisał:
    Po czym poznajesz że przerwania od Systicka nie działają? Próbowałeś bez FreeRTOSa migać diodkami?

    Bez FreeRtosa przerwania działają, z FreeRtosem nie.

    Próbowałem też wkleić do folderu z projektem pliki freertosa, następnie wskazać kompilatorowi ścieżki do tych plików
    Jak uruchomić FreeRTOS na stm32

    Próbuję kompilować i jak zwykle:

    Code:
    C HOME: C:\Program Files (x86)\GNU Tools ARM Embedded\4.9 2014q4\bin
    
    compile:
        [mkdir] Skipping C:\CooCox\CoIDE\workspace\RTOS\rtos\Debug\bin because it already exists.
        [mkdir] Skipping C:\CooCox\CoIDE\workspace\RTOS\rtos\Debug\obj because it already exists.
           [cc] 6 total files to be compiled.
           [cc] arm-none-eabi-gcc -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -Wall -ffunction-sections -g -O0 -c -DSTM32F401VC -DSTM32F4XX -DUSE_STDPERIPH_DRIVER -D__ASSEMBLY__ -D__FPU_USED -IC:\CooCox\CoIDE\workspace\RTOS -IC:\CooCox\CoIDE\workspace\RTOS\freertos\source -IC:\CooCox\CoIDE\workspace -IC:\CooCox\CoIDE\workspace\RTOS\freertos\source\portable\memmang -IC:\CooCox\CoIDE\workspace\RTOS\cmsis_boot -IC:\CooCox\CoIDE\workspace\RTOS\cmsis_lib -IC:\CooCox\CoIDE\workspace\RTOS\cmsis_lib\include -IC:\CooCox\CoIDE -IC:\CooCox\CoIDE\workspace\RTOS\cmsis -IC:\CooCox\CoIDE\workspace\RTOS\freertos\source\portable\gcc\arm_cm4f -IC:\CooCox\CoIDE\workspace\RTOS\freertos\source\include C:\CooCox\CoIDE\workspace\RTOS\cmsis_boot\startup\startup_stm32f4xx.c C:\CooCox\CoIDE\workspace\RTOS\main.c C:\CooCox\CoIDE\workspace\RTOS\cmsis_lib\source\stm32f4xx_rcc.c C:\CooCox\CoIDE\workspace\RTOS\stm32f401_discovery.c C:\CooCox\CoIDE\workspace\RTOS\cmsis_lib\source\stm32f4xx_gpio.c C:\CooCox\CoIDE\workspace\RTOS\cmsis_boot\system_stm32f4xx.c
           [cc] In file included from C:\CooCox\CoIDE\workspace\RTOS\freertos\source\include/portable.h:94:0,
           [cc]                  from C:\CooCox\CoIDE\workspace\RTOS\freertos\source\include/FreeRTOS.h:104,
           [cc]                  from C:\CooCox\CoIDE\workspace\RTOS\main.c:2:
           [cc] C:\CooCox\CoIDE\workspace\RTOS\freertos\source\portable\gcc\arm_cm4f/portmacro.h:96:23: error: missing binary operator before token "long"
           [cc]  #define portBASE_TYPE long
           [cc]                        ^
           [cc] C:\CooCox\CoIDE\workspace\RTOS\freertos\source/FreeRTOSConfig.h:95:44: note: in expansion of macro 'portBASE_TYPE'
           [cc]  #define configMAX_PRIORITIES  ( ( unsigned portBASE_TYPE ) 10 )
           [cc]                                             ^
           [cc] C:\CooCox\CoIDE\workspace\RTOS\freertos\source\portable\gcc\arm_cm4f/portmacro.h:182:7: note: in expansion of macro 'configMAX_PRIORITIES'
           [cc]   #if( configMAX_PRIORITIES > 32 )
           [cc]        ^
           [cc] In file included from C:\CooCox\CoIDE\workspace\RTOS\main.c:3:0:
           [cc] C:\CooCox\CoIDE\workspace\RTOS\main.c: In function 'main':
           [cc] C:\CooCox\CoIDE\workspace\RTOS\freertos\source\include/task.h:345:134: warning: pointer targets in passing argument 2 of 'xTaskGenericCreate' differ in signedness [-Wpointer-sign]
           [cc]  #define xTaskCreate( pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pxCreatedTask ) xTaskGenericCreate( ( pvTaskCode ), ( pcName ), ( usStackDepth ), ( pvParameters ), ( uxPriority ), ( pxCreatedTask ), ( NULL ), ( NULL ) )
           [cc]                                                                                                                                       ^
           [cc] C:\CooCox\CoIDE\workspace\RTOS\main.c:30:2: note: in expansion of macro 'xTaskCreate'
           [cc]   xTaskCreate(task1, ( signed char * ) "task1", configMINIMAL_STACK_SIZE, NULL, 0, NULL);
           [cc]   ^
           [cc] C:\CooCox\CoIDE\workspace\RTOS\freertos\source\include/task.h:1968:12: note: expected 'const char * const' but argument is of type 'signed char *'
           [cc]  BaseType_t xTaskGenericCreate( TaskFunction_t pxTaskCode, const char * const pcName, const uint16_t usStackDepth, void * const pvParameters, UBaseType_t uxPriority, TaskHandle_t * const pxCreatedTask, StackType_t * const puxStackBuffer, const MemoryRegion_t * const xRegions ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
           [cc]             ^

    BUILD FAILED
    Total time: 2 seconds

    0
  • #11 27 Lip 2015 18:35
    ka_3
    Poziom 16  

    Ktoś coś wie?
    Może w innym środowisku da się po ludzku uruchomić te wspaniały system?

    0
  • #12 26 Wrz 2016 16:22
    grzegorzn
    Poziom 11  

    Cytat:
    [cc] C:\CooCox\CoIDE\workspace\RTOS\freertos\source/FreeRTOSConfig.h:95:44: note: in expansion of macro 'portBASE_TYPE'
    [cc] #define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 10 )
    [cc] ^
    [cc] C:\CooCox\CoIDE\workspace\RTOS\freertos\source\portable\gcc\arm_cm4f/portmacro.h:182:7: note: in expansion of macro 'configMAX_PRIORITIES'
    [cc] #if( configMAX_PRIORITIES > 32 )
    [cc] ^


    Wywal ( unsigned portBASE_TYPE ).



    ----
    Wydzielono z tematu: Jak uruchomić FreeRTOS na stm32
    przez piotrva dnia 26 Wrz 2016 16:49

    0