上期写了 FreeRTOS 的移植教程,这期写一下RT-Thread 的移植!
板子还是同一块:STM32F103C6T6。由于板子内存较小 移植的nano版本。
1. CubeMX 工程准备
创建工程的部分 这期省略 详细可以看上一篇 我们直接从生成完keil工程开始。 
⚠️ 避坑预警: 需要注意 在rt-thread需要在生成中断函数多关闭一项HardFault 其他没有区别 如图: 
新建文件夹 RTOS,并在其内部新建 Core, Inc, Port 三个文件夹。 

2. 下载并整理 RT-Thread Nano 源码
在 GitHub 上搜索 rt-thread-nano 并下载最新源码: 

下载完毕后解压: 
将这些文件复制到Core文件夹下 如图 

将这些文件复制到Inc文件夹下 如图 

将这些文件复制到Port文件夹下 如图 


3. Keil 工程配置与代码修改
打开工程 配置编译器ARM Compiler 6 并且导入头文件和左侧工程树 如图: 


🔨 修改底层配置文件
修改 rtconfig.h 打开RTOS/Port下的rtconfig.h 在头部加入
c
#include <stdarg.h>如图 
修改board.c 删掉#error 补入下文
c
extern void SystemClock_Config(void);
HAL_Init();
SystemClock_Config();
SystemCoreClockUpdate();
/*
* 1: OS Tick Configuration
* Enable the hardware timer and call the rt_os_tick_callback function
* periodically with the frequency RT_TICK_PER_SECOND.
*/
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/RT_TICK_PER_SECOND);并在头顶补上头文件main.h 由于芯片内存较小 这边#define RT_HEAP_SIZE 设置为(6*1024)


修改void rt_os_tick_callback(void) 修改void rt_os_tick_callback(void)为void SysTick_Handler(void)并补上一行
c
HAL_IncTick();到这里 基本移植已经完成了 现在开始测试 
4. 跑通测试与总结
编写几个测试任务跑一下: 


需要注意的是 rt-thread和freertos有一点不同 freertos进入之后main函数就作废了 但是rt-thread里main函数变成一个任务了 因此while(1)还能继续运行
完结撒花!
