avatar🌌
零醇零醇の小屋

愿你有一天,能与你最重要的人重逢。

摸鱼摸鱼

RT-Thread Nano 的初体验

上期写了 FreeRTOS 的移植教程,这期写一下RT-Thread 的移植!

板子还是同一块:STM32F103C6T6。由于板子内存较小 移植的nano版本。


1. CubeMX 工程准备

创建工程的部分 这期省略 详细可以看上一篇 我们直接从生成完keil工程开始。 图1

⚠️ 避坑预警: 需要注意 在rt-thread需要在生成中断函数多关闭一项HardFault 其他没有区别 如图: 图14

新建文件夹 RTOS,并在其内部新建 Core, Inc, Port 三个文件夹。 图2图3


2. 下载并整理 RT-Thread Nano 源码

在 GitHub 上搜索 rt-thread-nano 并下载最新源码: 图4图5

下载完毕后解压: 图6

将这些文件复制到Core文件夹下 如图 图7图8

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

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


3. Keil 工程配置与代码修改

打开工程 配置编译器ARM Compiler 6 并且导入头文件和左侧工程树 如图: 图15图16图17

🔨 修改底层配置文件

修改 rtconfig.h 打开RTOS/Port下的rtconfig.h 在头部加入

c
#include <stdarg.h>

如图 图18

修改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)图19图20图21

修改void rt_os_tick_callback(void) 修改void rt_os_tick_callback(void)为void SysTick_Handler(void)并补上一行

c
HAL_IncTick();

到这里 基本移植已经完成了 现在开始测试 图23


4. 跑通测试与总结

编写几个测试任务跑一下: 图24图25图26图27 需要注意的是 rt-thread和freertos有一点不同 freertos进入之后main函数就作废了 但是rt-thread里main函数变成一个任务了 因此while(1)还能继续运行

完结撒花!

STM32 HAL库入门教程(一):从零开始做点灯大师
抛弃CubeMX一键生成,手把手教你硬核移植 FreeRTOS