开始

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的代码生成

image.png

然后在ASM选项卡选择自动连接汇编文件。

image.png

文件添加完毕之后,把用户自己写的SysTick_Handler()和PendSV_Handler()删掉,这两个函数ThreadX自带。

在tx_initialize_low_level_sample.S文件中,SYSTEM_CLOCK = 6000000这里是指系统时钟,大家可以根据自己的系统时钟进行配置。添加__RAM_segment_used_end__ = __initial_sp,作为堆栈的配置。全局搜索_vectors,全部替换为STM32平台的 __Vectors。接下来就可以进行编译了。

image.png

接下来会报一些错,都是一些钩子函数没有定义造成的,可能是微软还是没有把所有的程序开源吧,这里只需要屏蔽就好了。

需要注意的是tx_application_define这个系统函数是需要自己定义的,这个是一个用于初始化线程的函数。

以上,就是完整的ThreadX移植过程,希望大家能好好地学习。附上工程的链接.

————————————————

版权声明:本文为CSDN博主「qq_14815525」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_14815525/article/details/107050830