STM32F103移植ThreadX
- 開始
- 準備
- 實施
-
- 修改檔案
開始
ThreadX是一個經過了多重安全認證的RTOS,最近微軟把ThreadX的源碼開源了,可謂廣大嵌入式開發者的福音。GitHub下載下傳位址.
以下是ThreadX及其所有中間件的安全認證等級,至今沒有一款小型RTOS可以與其匹敵。
(1)醫療 - FDA510(k),IEC-62304 Class C,IEC-60601,ISO-14971
(2)工業 - UL-1998,IEC-61508 SIL 4
(3)運輸/鐵路 - EN50128 SIL 4,BS50128, 49CFR236,IEC-61508
(4)航空航天裝置 - DO-178B,ED-12B,DO-278
(5)汽車 - IEC-61508 ASIL D
(6)核應用 - IEC-61508
(7)家電 - UL/IEC 60730/60335
由于ThreadX前期一直的商業開源的,相關資料都比較少,國内安富萊論壇的硬漢哥對ThreadX做了STM32的一直,但沒有移植到STM32F1系列的。本文将模範硬漢哥,将ThreadX一直到STMF1的Keil工程上。附帶安富萊的工程模闆傳送門.
準備
- F103的工程模闆
- ThreadX的源碼
- MDK5.30以上
之是以要用MDK5.30以上的版本是因為ThreadX的源碼隻提供GNU的ports檔案,而MDK5.30可以自動連結GNU的ports檔案,這個省去了自己修改的麻煩。
實施
修改檔案
将ThreadX的檔案夾複制到需要移植的工程路徑下,在工程中添加common裡面的.c檔案和prots裡面的.s檔案,其中prots選擇裡面m3檔案夾下的.s代碼,tx_vector_table_sample.S不用添加。
添加檔案後,工程需要勾選Use MicroLIB,并選擇用Version6的代碼生成
然後在ASM頁籤選擇自動連接配接彙編檔案。
檔案添加完畢之後,把使用者自己寫的
SysTick_Handler()
和
PendSV_Handler()
删掉,這兩個函數ThreadX自帶。
在
tx_initialize_low_level_sample.S
檔案中,
SYSTEM_CLOCK = 6000000
這裡是指系統時鐘,大家可以根據自己的系統時鐘進行配置。添加
__RAM_segment_used_end__ = __initial_sp
,作為堆棧的配置。全局搜尋
_vectors
,全部替換為STM32平台的
__Vectors
。接下來就可以進行編譯了。
接下來會報一些錯,都是一些鈎子函數沒有定義造成的,可能是微軟還是沒有把所有的程式開源吧,這裡隻需要屏蔽就好了。
需要注意的是
tx_application_define
這個系統函數是需要自己定義的,這個是一個用于初始化線程的函數。
以上,就是完整的ThreadX移植過程,希望大家能好好地學習。附上工程的連結.