FreeRTOS移植到STM32

1 FreeRTOS需要哪些文件

    FreeRTOS的文件結構非常簡單,移植或者版本升級替換也非常方便。
    1)與FreeRTOS內核有關的文件數量爲5個,分別是list.c queue.c tasks.c timers.c croutine.c 
    該文件位於FreeRTOS\Source
    2)與內存分配有關的文件共有4個,分別是heap_1.c,heap_2.c,heap_3.c,heap_4.c。4個文件只需選擇其中的1個,STM32選擇heap_2.c。
    該文件位於FreeRTOS\Source\portable\MemMang
    3)與移植相關的代碼包括port.c,portasm.s,portmacro.h。這些代碼不但和編譯器有關還和平臺(MCU)有關。FreeRTOS先以編譯器爲大類,然後再以平臺(MCU)爲小類。在這裏選擇IAR編譯器,平臺爲ARM_CM3。
    該文件位於FreeRTOS\Source\portable\IAR\ARM_CM3
    4)除了上述內容之外,還包括FreeRTOS內核相關的頭文件。
    該文件FreeRTOS\Source\include
    5)把FreeRTOSConfig.h複製到FreeRTOS\Source\include路徑下。
     該文件\FreeRTOS\Demo\CORTEX_STM32F103_IAR
必要的工程設置
    開始之前需要引入V3.5庫相關頭文件,啓動代碼和CMSIS庫。
    在IAR中設置相關頭文件的路徑(應根據實際情況修改)
    $PROJ_DIR$\CMSIS
    $PROJ_DIR$\StdPeriph_Driver\inc
    $PROJ_DIR$\User
    $PROJ_DIR$\FreeRTOS\Source\include
    $PROJ_DIR$\FreeRTOS\Source\portable\IAR\ARM_CM3
    當然頭文件的路徑並不是絕對的,只要明確頭文件在哪,設置正確路徑即可。
    除了設置C代碼的相關頭文件之外,還需要設置彙編代碼的頭文件路徑,由於很少設置彙編代碼頭文件路徑,往往初次移植FreeRTOS會在此處遇到一些“困難”。(當然也包括我)
    由於portasm.s需要FreeRTOSConfig.h中的相關宏定義,所以要根據FreeRTOSConfig.h的位置來設置彙編代碼的頭文件路徑,本例中FreeRTOSConfig.h位於incude文件夾,所以設置如下圖所示。
圖1 設置ASM頭文件搜索路徑

修改啓動代碼

由於SVC_Handle,PendSV_Handle和SysTick_Handle在portasm.s中被重定義,所以需要在啓動代碼中修改這些中斷向量的名稱,並聲明這些中斷向量爲外部函數。這也是初次使用FreeRTOS容易範的錯誤。具體修改如下所示。
圖2 啓動代碼修改
    請注意,在彙編代碼中";"代表註釋。EXTERN和C語言的extern含義相同——意爲外部函數(變量)。
    EXTERN  __iar_program_start
    EXTERN  SystemInit   
    EXTERN  vPortSVCHandler           ;@
    EXTERN  xPortPendSVHandler        ;@
    EXTERN  xPortSysTickHandler       ;@
    PUBLIC  __vector_table
    聲明vPortSVCHandler,xPortPendSVHandler和xPortSysTickHandler爲外部函數。
    vPortSVCHandler對應SVC_Handler 
    xPortPendSVHandler對應PendSV_Handle
    xPortSysTickHandle對應SysTick_Handle


4 加入main.c 啓動內核,則移植成功


發佈了2 篇原創文章 · 獲贊 25 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章