netx移植 threadx_ThreadX操作系统在MDK中的移植方法

本文原创作者初晴,感谢大佬提供的PDF,本文经授权后整理发布。

1. 前言

微软于最近开源了 ThreadX 操作系统,关于这个RTOS有多牛逼,请看硬汉哥的这篇文章:

ThreadX全家桶初探,一旦推广起来,对其它RTOS和中间件几乎是毁灭性打击

本文中使用的开发板为小熊派IoT开发板,主控为STM32L431RCT6:

在移植之前,请确保你的MDK版本至少是5.30,否则会失败,可以在硬汉哥的不限速镜像下载:

MDK5.29,5.30和各种软件包镜像下载(2020-06-07)

请准备一份可以正常使用printf串口输出的裸机工程,本文中我使用cubemx生成。

ThreadX源码请访问开源仓库获取:https://github.com/azure-rtos

2. 复制ThreadX源码

3. 添加源码到MDK工程

新建threadX/common分组,添加threadX/common/src下的所有c文件:

新建threadX/ports分组,添加 threadX\ports\cortex_m4\gnu\src 下的8个S文件(除去tx_vector_table_sample.c):

添加头文件路径:

设置ASM汇编头文件路径:

4. 修改适配

① 修改AC6的编译器:

② 修改tx_initialize_low_level_sample.S中的时钟频率和系统工作频率:

③ 修改tx_initialize_low_level_sample.S文件,设置全局标号__RAM_segment_used_end__:

④ 修改tx_initialize_low_level_sample.S文件,按Ctrl+H进行替换,将全局标号_vectors全部替换为大写,注意多了一个下划线:

⑤ 屏蔽四个函数:

⑥ 去除原有stm32l4xx_it.c中的PendSV和Systick中断服务函数:

至此,移植完成,编译会提示有一个错误:

这个函数是留给用户自己定义的,接下来会创建。

5. 编写应用代码

① 包含进来threadx的头文件:

/* Private includes ----------------------------------------------------------*/

/* USER CODE BEGIN Includes */

#include

#include "tx_api.h"

/* USER CODE END Includes */

② 定义两个线程:

/* Private user code ---------------------------------------------------------*/

/* USER CODE BEGIN 0 */

TX_THREAD my_thread1;

TX_THREAD my_thread2;

void my_thread1_entry(ULONG thread_input)

{

/* Enter into a forever loop. */

while(1)

{

printf("threadx 1 application running...\r\n");

/* Sleep for 1 tick. */

tx_thread_sleep(1000);

}

}

void my_thread2_entry(ULONG thread_input)

{

/* Enter into a forever loop. */

while(1)

{

printf("threadx 2 application running...\r\n");

/* Sleep for 1 tick. */

tx_thread_sleep(1000);

}

}

void tx_application_define(void *first_unused_memory)

{

/* Create my_thread! */

tx_thread_create(&my_thread1, "My Thread 1",

my_thread1_entry, 0x1234, first_unused_memory, 1024, 3, 3, TX_NO_TIME_SLICE, TX_AUTO_START);

tx_thread_create(&my_thread2, "My Thread 2",

my_thread2_entry, 0x1234, first_unused_memory+1024, 1024, 1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);

}

③ 在main函数初始化完成之后启动内核:

/* USER CODE BEGIN 2 */

printf("threadX RTOS on BearPi IoT Board\r\n");

/* Enter the ThreadX kernel. */

tx_kernel_enter( );

/* USER CODE END 2 */

编译,下载,在串口终端查看结果:

赶快玩起来吧~

接收更多精彩文章及资源推送,欢迎订阅我的微信公众号:『mculover666』。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值