GD32F103系列FreeRTOS移植并测试案例

article/2025/7/26 17:02:38

1 首先准备一份上一个博客里的GD32F103C8T6的工程模版

2 从        FreeRTOS官网下载源码,链接如下
FreeRTOS™ - FreeRTOS™

 博主下载的是这一版本  

FreeRTOSv202406.01-LTS.zip

这两份文件都会上传CSDN资源,或者需要的私聊,下面正式开始移植
 

1   首先将 下载下来的FreeRTOS源码解压,得到如下

2  在准备好的工程模版下新建一个文件夹命名为:FreeRTOS 如下图

 

 3  将官方FreeRTOS源码如下路径下的文件都复制到工程模版下的FreeRTOS文件夹下
 

FreeRTOS-LTS\FreeRTOS\FreeRTOS-Kernel

 上图红框内的文件都复制到如下图

 

删除一些工程模版FreeRTOS文件夹下的一些文件,仅保留如下文件

 然后在当前FreeRTOS目录下新建一个文件夹src,将FreeRTOS目录下的8个文件剪切到src文件夹下,如下图:

之后进入到portable文件夹下,只保留下图三个文件夹,其余全部删除,如下图:

MemMang下是官方给的5种内存管理的方法,各有长处,根据需要选一种方式即可

 实体文件移植好了,下面是虚拟文件的映射了

1  添加src下的文件到工程,如下图

2> 添加portable/MemMang/heap_4文件到工程   
添加portable/RVDS/ARM_CM3/port文件到工程,因为GD32F103内核是Cortex-M3内核。
注:F407系列则选CMF4内核

 之后点击OK

3  添加相应的头文件路径如下图,然后点击OK

4 缺少FreeRTOSConfig.h这个头文件,我们在FreeRTOS源码中复制一个将这个路径下的

FreeRTOSConfig.h文件添加到工程中,如下图:

 至此,配置完成,接下来是测试和编译了

1 首先编译一下出现如下报错

这个报错意味着宏定义错误,因为我们是32位系统要将下列宏定义改为32位

 

#define configTICK_TYPE_WIDTH_IN_BITS              TICK_TYPE_WIDTH_32_BITS

修改后再编译出现如下报错

 这个错误是 FreeRTOS 在 Cortex-M3 内核移植时的一个配置错误,具体原因是 configMAX_SYSCALL_INTERRUPT_PRIORITY 被设置为 0,而这是不允许的。

configMAX_SYSCALL_INTERRUPT_PRIORITY。这个宏定义了 FreeRTOS 可以管理的中断的最高优先级(数值越小,逻辑优先级越高)。如果设置为 0,意味着试图让 FreeRTOS 管理最高硬件优先级的中断(如硬件错误、NMI 等),这是不允许的。

我们配置为如下

#define configMAX_SYSCALL_INTERRUPT_PRIORITY     0x60  // 优先级3  表示优先级 ≤ 3 的中断可调用 FreeRTOS API

 

继续编译出现如下报错

 

这个错误是链接阶段(Linking)出现的,表示 FreeRTOS 在编译时找不到 vApplicationStackOverflowHook 函数的实现。
错误原因:
FreeRTOS 提供了堆栈溢出检测功能(如果启用了 configCHECK_FOR_STACK_OVERFLOW),但需要用户实现回调函数 vApplicationStackOverflowHook,以便在堆栈溢出时执行自定义处理(如打印错误、复位系统等)。
如果 configCHECK_FOR_STACK_OVERFLOW 设置为 1 或 2,但未提供 vApplicationStackOverflowHook 的实现,链接器就会报此错误。

解决方法
方法 1:禁用堆栈溢出检测(不推荐)
如果你暂时不需要堆栈溢出检测,可以在 FreeRTOSConfig.h 中关闭该功能:

方法 2:实现 vApplicationStackOverflowHook(推荐)
在项目中(通常是 main.c 或 freertos_hooks.c)添加该函数的实现,例如:

#include "FreeRTOS.h"
#include "task.h"void vApplicationStackOverflowHook(TaskHandle_t xTask, char *pcTaskName)
{(void)xTask;  // 避免未使用变量警告printf("ERROR: Stack overflow in task %s\n", pcTaskName);while (1);  // 死循环,或触发系统复位
}

我们选用第一种办法修改成如下宏定义

#define configCHECK_FOR_STACK_OVERFLOW        0

 编译无报错如下

 

接下来我们编写一个demo点灯测试

 

#include "main.h"#include "FreeRTOS.h"
#include "task.h"#define LED1_TASK_PRIO    ( tskIDLE_PRIORITY + 2 )void LED1_task(void * pvParameters);int main(void)
{/* 设置优先级分组为4,16个优先级全是抢占优先级 */nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0);xTaskCreate(LED1_task, "LED1", configMINIMAL_STACK_SIZE, NULL, LED1_TASK_PRIO, NULL);/* start scheduler */vTaskStartScheduler();while(1){}
}
void LED1_task(void * pvParameters)
{  for( ;; ){/* toggle LED2 each 500ms */LED_SET(1);vTaskDelay(800);LED_SET(0);vTaskDelay(800);}
}

 

编写好后编译如下,无报错

接下来注释掉三个中断函数,如下图

 然后声明也注释掉,如下图

接下来添加一些宏定义如下图

 

#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler

然后编译无报错,如下图

点灯程序下载运行后无反应,发现是GPIO未初始化

主程序改为如下,添加IO初始化
 

#include "main.h"#include "FreeRTOS.h"
#include "task.h"#define LED1_TASK_PRIO    ( tskIDLE_PRIORITY + 2 )void LED1_task(void * pvParameters);int main(void)
{GPIO_Init();/* 设置优先级分组为4,16个优先级全是抢占优先级 */nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0);xTaskCreate(LED1_task, "LED1", configMINIMAL_STACK_SIZE, NULL, LED1_TASK_PRIO, NULL);/* start scheduler */vTaskStartScheduler();while(1){}
}
void LED1_task(void * pvParameters)
{  for( ;; ){/* toggle LED2 each 500ms */LED_SET(1);vTaskDelay(300);LED_SET(0);vTaskDelay(300);}
}

 编译下载,灯闪烁了,代表移植OK

 至此结束,后续继续更新这个系列
 


http://www.hkcw.cn/article/waGVCZsgHk.shtml

相关文章

Redis分布式锁深度解析与最佳实践

1 2 Redis分布式锁实现方式确实是经典问题,下面我将系统性地分析这个方案及其演进过程,并给出生产级的解决方案。 一、基础方案及其缺陷 1. 初始实现方式 SETNX lock_key unique_value # 尝试获取锁 EXPIRE lock_key 30 # 设置过期时间 …

业内:A股市场或迎来新一轮“反弹” 科技股领涨显现活力

中美之间的科技竞争非常激烈。美国近期采取了一系列措施,甚至提出了让中概股从美股市场退出的想法。对此,中国证监会本周表示,将为科技企业境外上市提供更加透明、高效且可预期的监管政策。过去几年,中概股在海外市场经历了巨大的波动。美国对审计底稿的要求越来越严格,导…

盟友为何不再信任美国了 美方言行不一引质疑

2025年新加坡香格里拉对话会结束。清华大学战略与安全研究中心研究员、退役空军大校周波已经连续十几年参加这一论坛,并长期参与中国对外舆论斗争。他在一周前接受澳大利亚媒体采访时,被问到“如果中澳爆发冲突,谁会赢?”时,直接回应“你们必输”,引起广泛关注。今年的“…

周深让你穿雨衣没让你穿这款 萌系造型笑翻全场

周深南京演唱会遭遇大雨,粉丝们纷纷建议他穿雨衣防雨。没想到,他竟然选择了一件亮黄色的儿童款小黄鸭雨衣,这一造型让现场观众捧腹大笑。2025年6月1日,周深在南京的演唱会上,连续两天的大雨并未影响他的心情。他身穿一件亮黄色的小黄鸭雨衣,蹦蹦跳跳地登台,瞬间点燃了现…

菲律宾防长说中国记者是特工 南海风波再起

最近,菲律宾的一些非政府组织在中国南海海域活动频繁。经过调查,发现这些组织的资金链背后有美国资助的迹象,这似乎揭示了反华机构的新手段。然而,在与菲律宾国防部长对质时,他却情绪激动,直接指责记者为“特工”。责任编辑:zx0001

openssl 怎么生成吊销列表

mkdir test cd test # cp /etc/ssl/openssl.cnf ./ # 根据 /usr/lib/ssl/openssl.cnf 配置文件中目录结构可知有个demoCA目录,目录下有各种文件。 mkdir ./demoCA ./demoCA/newcerts ./demoCA/private sudo chmod 777 -R ./demoCA/ echo 01 > ./demoCA/serial to…

抖音客户端训练营--day2

常见的布局 布局的选择依赖于对性能的需求,其中约束布局的效果最好,但是学习成本高 帧布局 是最简单的布局容器,将所有的子元素堆叠在一起,默认放置在左上角,新添加的元素会覆盖在之前元素的上方,形成层叠…

郑钦文胜利后发文送儿童节祝福 首次闯进法网八强

北京时间6月1日,在2025年法国网球公开赛女单第四轮比赛中,中国选手郑钦文击败俄罗斯球员萨姆索诺娃,首次闯进法网女单八强。赛后,她难掩激动心情,在场边与观众一同唱起歌曲《日不落》,现场气氛热烈。这一幕有其缘起。在上一轮比赛中,郑钦文击败姆博科晋级16强后,在社交…

不要一直坐着!研究发现久坐时间越长,患痴呆风险更大 老年朋友需特别注意

在快节奏的现代生活中,少坐多动似乎成了难以实现的目标。久坐已成为很多人的常态,尤其是老年人,由于身体状况不佳、缺乏社交和活动兴趣,养成了长期久坐的习惯。然而,这种看似平常的行为对老年人的健康产生了重大影响。近期发表的两项研究探讨了久坐对老年人认知功能和心血…

端午假期后天气 南北差异明显

端午假期(5月31日至6月2日)即将到来,作为传统节日,赛龙舟、包粽子等民俗活动丰富多彩。今年假期恰逢六一儿童节,亲子游和短途游的热情也格外高涨。中国天气网推出了2025年全国端午假期天气地图和十大热门出游地晴雨表,帮助大家了解出行所需装备。从天气地图来看,北方大部…

网传赵丽颖将客串九门 热度背后引思考

最近,娱乐圈再次掀起热议,网传赵丽颖将客串《九门》,消息迅速登上热搜,引发粉丝和网友的热烈讨论。然而,在这波热度背后,值得我们冷静思考的是,这样的炒作是否真的有必要。《九门》已经官宣了新女主陈瑶,她为诠释霍仙姑一角付出了诸多努力,从研读剧本到练习民国礼仪都…

距今约3万年的山顶洞人身高曝光 远古人类身高新发现

近日,一项关于山顶洞人的研究成果引发热议。研究显示,距今约3万年的山顶洞人男性平均身高约为1.74米,女性约为1.59米,与现代人身高非常接近。这一发现仿佛打开了一扇穿越时空的大门,让人们得以一窥远古人类的生活。山顶洞人在人类进化史上占据重要地位。与更早的北京猿人相…

马斯克称政府效率部成了替罪羊 裁员责任全推卸

当地时间6月1日,美国企业家埃隆马斯克在接受哥伦比亚广播公司采访时表达了他对美国政府的态度。他表示自己不想公开反对政府,但也不愿意为政府的所有行为承担责任。他提到,由他领导的“政府效率部”成为了所有问题的替罪羊,无论是真实的还是虚构的裁员事件都被归咎于该部门…

听航天专家揭秘天问二号任务 探秘小行星取样返回

我国在西昌卫星发射中心用长征三号乙运载火箭成功发射了行星探测工程天问二号探测器。火箭飞行约18分钟后,将探测器送入地球至小行星2016HO3的转移轨道。随后,探测器太阳翼正常展开,标志着发射任务圆满成功。天问二号是我国首次实施的行星际取样返回任务,旨在对小行星2016H…

【PyQt5】PyQt5初探 - 一个简单的例程

PyQt5初探 - 一个简单的例程 引言一、安装配置二、使用2.1 PyQt5简单例程2.2 与c Qt深入对比 三、相关教程 引言 PyQt5是一个比较流行的Python图形用户界面(GUI)库,它基于Qt库(一个跨平台的C库,用于开发应用程序的图形界面)为Pyt…

复数的指数形式:MATLAB演示

复数的指数形式:MATLAB演示 复数在工程和科学计算中无处不在,而指数形式(又称极坐标形式)是表示和处理复数的一种强大方式。本文将介绍复数的指数形式表示法,并展示如何使用MATLAB进行相关计算和可视化。 复数的基础…

FastAPI MCP 快速入门教程

目录 什么是 FastAPI MCP?项目设置1. 初始化项目2. 安装依赖3. 项目结构 编写代码创建主应用文件 运行和测试1. 启动服务器2. 使用 MCP Inspector 测试 什么是 FastAPI MCP? FastAPI MCP 是一个将 FastAPI 应用程序转换为 Model Context Protocol (MCP)…

俄罗斯代表团抵达土耳其 将参加俄乌谈判

当地时间6月1日,俄罗斯代表团抵达土耳其伊斯坦布尔,准备参加即将举行的俄乌谈判。俄谈判代表团团长梅金斯基在抵达后表示,所有与乌克兰谈判相关的评论都将于6月2日做出,并会在当天就俄罗斯在乌克兰问题上的立场发表详细声明。同一天,俄方代表团成员、俄国防部副部长福明也…

官员不作为岂能成为卖货噱头 消解严肃叙事引争议

5月31日晚,曾在热播电视剧《人民的名义》中饰演“宇宙区长”孙连城一角的演员李威,在短视频平台开启直播带货,销售天文望远镜。近一周内,李威已进行了三场相关直播。然而,6月1日上午,他发布的直播预告视频疑似被隐藏或删除,商品橱窗里的天文望远镜也已清空。李威在《人民…

当地纪委监委介入同案相反判决事件 调查正在进行

5月31日,河南省信阳市平桥区纪委监委发布情况通报。近日,网上关于“律师称两天收到同案相反‘判决’”引起网民关注。经核实,该案件是平桥区人民法院审理的一起股权转让纠纷案件。目前,平桥区纪委监委已介入调查。责任编辑:zx0176