STM32F103移植ThreadX

    技术2022-07-10  136

    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移植过程,希望大家能好好地学习。附上工程的链接.

    Processed: 0.010, SQL: 9