FreeRTOS移植到STM32
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
2 必要的工程設置
開始之前需要引入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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.