RT-Thead学习(二)-GD32移植(基于RT-Thread Nano源码)

发布时间 2023-06-08 21:48:04作者: Miracle-Wu

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