RT-Thead学习(二)-GD32移植(基于RT-Thread Nano源码)
1 前言
当前关于RT的移植教程有很多,纯复制大佬们的很迷糊,参考官方手册和一些经验贴,完成了基于Nano源码的移植,最简单的移植教程就是基于keil的和这一种。
参考资料
1.野火资料(https://doc.embedfire.com/rtos/rtthread/zh/latest/application/porting_to_stm32.html)
2.微信公众号(物联网思考)
3.官方教程(https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-nano/an0038-nano-introduction)
环境配置
1 下载Nano源码
RT-Thread Nano 是一个极简版的硬实时内核,它是由 C 语言开发,采用面向对象的编程思维,具有良好的代码风格,是一款可裁剪的、抢占式实时多任务的 RTOS。其内存资源占用极小,功能包括任务处理、软件定时器、信号量、邮箱和实时调度等相对完整的实时操作系统特性。适用于家电、消费电子、医疗设备、工控等领域大量使用的 32 位 ARM 入门级 MCU 的场合。
https://codeload.github.com/RT-Thread/rtthread-nano/zip/refs/heads/master
2 工程目录下添加RT-Thread文件夹
文件夹组成如下
3 添加源码到工程
1.新建rtt/source放src文件
2.新建rtt/ports放libcpu/arm/cortex-m,这里的m,根据处理器型号来,我是m4
3.新建rtt/bsp文件
4 添加头文件路径
主要包括以下3个
在rtconfig中屏蔽//#include "RTE_Components.h",头文件RTE_Components.h是在MDK中添加RT-Thead Package时由MDK自动生成的, 目前我们没有使用MDK中自带的RT-Thread的Package,所以这个头文件不存在,如果包含了该头文件,编译的时 候会报错,等下修改rtconfig.h的时候需要注释掉该头文件。
在gd32f4xx_it.c中屏蔽以下
void HardFault_Handler(void)
//{
// /* if Hard Fault exception occurs, go to infinite loop */
// while(1) {
// }
//}
/*!
\brief this function handles PendSV exception
\param[in] none
\param[out] none
\retval none
*/
//void PendSV_Handler(void)
//{
//}
///*!
// \brief this function handles SysTick exception
// \param[in] none
// \param[out] none
// \retval none
//*/
//void SysTick_Handler(void)
//{
// delay_decrement();
//}
5 编译完成移植
6 修改rtconfig和board.c
这里是参照野火的书籍修改,其实移植到前面就结束了,不过建议按照书籍完成后面的修改,这里就不做重复工作了
修改的包括操作RTOS支持的最大优先级,操作系统时钟周期以及main线程栈大小
参考:
https://doc.embedfire.com/rtos/rtthread/zh/latest/application/porting_to_stm32.html#rtt-1