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,双击安装。

项目配置

image

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

代码移植

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加入滴答时钟设置。这个设置必须新加入。因为操作系统的调试是根据时间片的,如果没有滴答时钟的设置,滴答就不会产生中断,没有叫断就不会产生调试了。

修改结果

image

再次编译

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

posted @ 2025-07-25 10:21  cupid8505  阅读(277)  评论(0)    收藏  举报