打印
[研电赛技术支持]

GD32E23xx FreeRTOS移植

[复制链接]
1323|41
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2025-3-7 12:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
概述
        本文主要描述了GD32E230移植FreeRTOS的简要步骤。移植描述过程中,忽略了Keil软件的部分使用技巧。默认读者熟练使用Keil软件。本文的描述是基于OpenMCU_FreeRTOS这个工程,该工程已经下载放好了移植GD32E230 FreeRTOS的所有文件

        OpenMCU_FreeRTOS工程的愿景主要有:

        1.、能移植支持主流mcu的freeRTOS

        2、深入分析FreeRTOS代码和第三方库代码,让嵌入式学习变得非常容易;

        3、集成一些嵌入式产品中常用的第三方库文件,并且该工程会开发做一些产品原型,所有的技术方案,就像它的名字一样,全部开源。

移植步骤
1、keil创建GD32E230的工程



注意:一定要选中RTE中CMSIS中的CORE部分



2、工程创建完毕后,在keil中建立分组管理,如下所示:



创建完成后的效果:



4、下载FreeRTOS源码

        本文在描述过程中,所有的源码都是基于OpenMCU_FreeRTOS工程。文章的最后部分,有该工程的链接。

5、在刚才新创建的keil GD32E230工程目录下创建Appication文件夹和Utilities文件夹



6、将如下文件拷贝到Application文件夹下面.



7、将如下文件拷贝到Utilities文件下下面



注:

        拷贝的文件都来自于OpenMCU_RTOS工程;读者可以通过文章最后的连接,获得工程源码。

8、Application分组添加c文件



9、CMSIS添加system_gd32e23x.c C文件,文件存放的路径为:

OpenMCU_FreeRTOS\arch\GD32\GD32E23x\CMSIS\GD\GD32E23x\Source\



10、添加GD32E23x BSP驱动文件,文件路径为:

OpenMCU_FreeRTOS\arch\GD32\GD32E23x\GD32E23x_BSP\Source



11、添加启动文件startup_gd32e23x.s

文件路径:OpenMCU_FreeRTOS\arch\GD32\GD32E23x\CMSIS\GD\GD32E23x\Source\ARM\startup_gd32e23x.s



12、添加freeRTOS内核C文件,文件路径为:

OpenMCU_FreeRTOS\kernel



13、添加内核移植中的与GD32E230相关的代码

        由于GD23E230基于Cortex-M23架构,这部分代码跟Cortex-M4和Corex-M0的架构的移植不同,有安全和非安全的区别,我们基于非安全并且不开启ARM TrustZone特性进行讲解描述;



需要关注的文件路径:

port.c文件:OpenMCU_FreeRTOS\kernel\portable\ARMv8M\non_secure

portasm.c: OpenMCU_FreeRTOS\kernel\portable\ARMv8M\non_secure\portable\GCC\ARM_CM23_NTZ

heap_4.c: OpenMCU_FreeRTOS\kernel\portable\MemMang

FreeRTOSConfig.h: GD32E230\Application

14、所有分组添加完后如下图所示:



15、添加编译时的头文件路径

1、Application

2、OpenMCU_FreeRTOS\arch\GD32\GD32E23x\CMSIS\GD\GD32E23x\Include

3、OpenMCU_FreeRTOS\arch\GD32\GD32E23x\CMSIS

4、OpenMCU_FreeRTOS\arch\GD32\GD32E23x\GD32E23x_BSP\Include

5、Utilities

6、OpenMCU_FreeRTOS\kernel\include

7、OpenMCU_FreeRTOS\kernel\portable\ARMv8M\non_secure

8、OpenMCU_FreeRTOS\kernel\portable\ARMv8M\non_secure\portable\GCC\ARM_CM23_NTZ

添加完成后,如下所示:



16、编译器选项设置

加入GD32E230定义和修改编译警告级别



17、修改gd32e23x_it.c文件中的如下函数定义

删除SVC_Handler, PendSV_Handler SysTick_Handler 等函数定义

18、修改FreeRTOSConfig.h文件,将堆内存修改为5KB

由于整个GD32E230系列的SRAM配置如下如所示:



因此,将FreeRTOS的堆内存调整为5KB(程序本身加载也占用内存,调整过大,会导致程序链接编译错误)



19、编译输出



工程连接
yanl1229/OpenMCU_FreeRTOS
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/yanl1229/article/details/146032558

使用特权

评论回复
沙发
beacherblack| | 2025-3-19 10:52 | 只看该作者
下载FreeRTOS的最新版本,并确保源码的完整性。

使用特权

评论回复
板凳
janewood| | 2025-3-19 11:44 | 只看该作者
使用调试工具对移植后的FreeRTOS进行调试,确保所有任务能够正确运行,且没有发生资源冲突或死锁等问题。

使用特权

评论回复
地板
abotomson| | 2025-3-19 13:19 | 只看该作者
FreeRTOSConfig.h:这是FreeRTOS的核心配置文件

使用特权

评论回复
5
yeates333| | 2025-3-19 16:23 | 只看该作者
了解并遵循FreeRTOS关于中断处理的最佳实践,例如尽量缩短ISR内的处理逻辑,复杂的处理应该通过发布事件给任务的方式来完成。

使用特权

评论回复
6
lzbf| | 2025-3-20 08:58 | 只看该作者
GD32E23xx的Cortex-M0+内核及其相关架构特性,如中断向量表、系统定时器、堆栈指针等寄存器的设置和使用方式。

使用特权

评论回复
7
sheflynn| | 2025-3-20 11:29 | 只看该作者
正确配置Cortex-M0+内核的中断优先级分组

使用特权

评论回复
8
iyoum| | 2025-3-20 13:24 | 只看该作者
SysTick是FreeRTOS默认的时基中断,需在启动时配置其重载值以实现精确的时间切片。

使用特权

评论回复
9
mnynt121| | 2025-3-20 15:09 | 只看该作者
在调用vTaskStartScheduler()前完成所有必要的硬件初始化工作,比如时钟配置、外设初始化等。

使用特权

评论回复
10
febgxu| | 2025-3-20 16:52 | 只看该作者
为每个任务分配合理的优先级,避免优先级反转等问题。同时,要注意FreeRTOS中的任务优先级与传统的操作系统优先级可能存在差异,需要进行适当的转换和调整。

使用特权

评论回复
11
FranklinUNK| | 2025-3-20 21:53 | 只看该作者
有没有配置好的工程啊?

使用特权

评论回复
12
lzmm| | 2025-3-21 14:39 | 只看该作者
为每个任务分配足够的堆栈空间(GD32E23xx最大堆栈约12KB)。建议根据任务复杂度预留余量(如空闲任务堆栈设为configMINIMAL_STACK_SIZE的2倍)。

使用特权

评论回复
评论
YANG5815 2025-3-24 08:36 回复TA
请教一下这个12K的堆栈空间哪篇文档有提到过呢 
13
hilahope| | 2025-3-21 16:23 | 只看该作者
将耗时操作(如数据处理)移至任务层,ISR仅触发事件。

使用特权

评论回复
14
louliana| | 2025-3-21 18:28 | 只看该作者
检查堆栈分配是否足够,或任务函数参数传递错误。

使用特权

评论回复
15
mattlincoln| | 2025-3-21 21:15 | 只看该作者
对于资源受限的应用,注意优化内存使用,避免不必要的大块内存分配。

使用特权

评论回复
16
bestwell| | 2025-3-21 23:01 | 只看该作者
在移植过程中,可能需要修改或屏蔽某些中断函数,如SVC_Handler、PendSV_Handler、SysTick_Handler等,以避免与FreeRTOS的调度机制发生冲突。

使用特权

评论回复
17
bestwell| | 2025-3-22 17:44 | 只看该作者
将FreeRTOS移植到GD32E23xx系列微控制器上时,需要注意工程创建、文件添加与路径设置、编译器选项设置、中断函数处理、FreeRTOS配置、任务与调度器、硬件平台配置以及调试与验证等关键点。

使用特权

评论回复
18
51xlf| | 2025-3-22 17:59 | 只看该作者
正确设置了中断向量表以及异常处理程序,特别是PendSV和SysTick中断服务例程(ISR),它们对FreeRTOS的任务调度至关重要。

使用特权

评论回复
19
jackcat| | 2025-3-22 18:12 | 只看该作者
修改FreeRTOSConfig.h文件,根据GD32E230的硬件资源和应用需求,配置合适的堆内存大小、任务优先级、任务堆栈大小等参数。
特别注意,由于GD32E230系列的SRAM配置有限,因此需要将FreeRTOS的堆内存调整为合适的值,以避免程序链接编译错误。

使用特权

评论回复
20
alvpeg| | 2025-3-22 18:31 | 只看该作者
GD32E23xx系列微控制器支持FreeRTOS所需的硬件特性,如足够的RAM、ROM、时钟管理、中断控制器等。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2186

主题

16507

帖子

17

粉丝