stm32F407学习之3: RT-Thread Nano操作系统移植
RT-Thread 是一个开源的嵌入式实时多线程操作系统(RTOS),主要采用 C 语言编写,具有良好的可移植性和可裁剪性。它于 2006 年诞生,是一个中立且基于社区的实时操作系统。
主要特点
- 多任务支持:RT-Thread 支持多任务调度,允许多个任务快速切换,给人以多任务同时运行的错觉。
- 可裁剪性:它可以根据不同的硬件资源进行裁剪,例如其 NANO 版本仅需 3KB Flash 和 1.2KB RAM,适合资源受限的微控制器。
- 丰富的组件:RT-Thread 不仅仅是一个实时内核,还包含文件系统、图形库、网络框架等中间件组件,形成了一个完整的物联网操作系统。
- 低功耗与高性能:它具有低功耗、启动快速等特点,适合资源受限的场合。
RT-Thread Nano 是一个纯净的内核,去除了 RT-Thread 完整版的 Scons 构建系统、Env 配置工具、Kconfig 以及 device 框架和组件,仅保留了核心的线程管理、线程间同步与通信、时钟管理、中断管理和内存管理功能。
RT-Thread Nano的移植
安装包
下载RealThread.RT-Thread.3.1.5.pack,双击安装。
项目配置

配置成功后,可以在项目工程中看到RTOS项。请着重留意下board.h和rtthread.h两个文件,后续移植和配置时会使用到此两个文件,此文件的目录在工程Project/RET目录。当移植成功后,千万不要把这个目录给删除了。

代码移植
1. 修改stm32f4xx_it.c文件
屏蔽HardFault_Handler、PendSV_Handler和SysTick_Handler
前两个中断处理接口在rtthread中已实现,而SysTick_Handler需要在rtthread/board.c中需要改写。
2. 修改board.c文件
新加SysTick_Handler接口
volatile uint32_t g_systick_cnt = 0;
void SysTick_Handler()
{
rt_interrupt_enter();
rt_tick_increase();
g_systick_cnt++;
rt_interrupt_leave();
}
修改rt_hw_board_init
void rt_hw_board_init(void)
{
//#error "TODO 1: OS Tick Configuration."
#include "stm32f4xx.h"
//启动滴答中断,周期为1ms
SysTick_Config(SystemCoreClock / 1000);
/*
* TODO 1: OS Tick Configuration
* Enable the hardware timer and call the rt_os_tick_callback function
* periodically with the frequency RT_TICK_PER_SECOND.
*/
/* Call components board initial (use INIT_BOARD_EXPORT()) */
#ifdef RT_USING_COMPONENTS_INIT
rt_components_board_init();
#endif
#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get());
#endif
}
在rt_hw_board_init加入滴答时钟设置。这个设置必须新加入。因为操作系统的调试是根据时间片的,如果没有滴答时钟的设置,滴答就不会产生中断,没有叫断就不会产生调试了。
修改结果

再次编译
至此,RT-Thread Nano基本移植完成,编译项目后正常。


浙公网安备 33010602011771号