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

posted @ 2023-06-08 21:41  Phoenix-Tree  阅读(118)  评论(0编辑  收藏  举报