单片机GD32F303RCT6 (Macos环境)开发 (二十二)—— FreeRTOS的移植

news/2024/5/15 19:55:40/文章来源:https://blog.csdn.net/weixin_43932857/article/details/130776937

GD32F303RCT6 FreeRTOS的移植

1、在Application的Makefile中增加freertos的编译选项,如下:

ENABLE_FREERTOS = yes
ifeq ($(ENABLE_FREERTOS), yes)
APPLICATION_FLAGS += \
-DENABLE_FREERTOS
endif

2、Application目录下增加FreeRtos目录,将下载的FreeRTOS源码中的如下文件拷贝到FreeRtos目录。
在这里插入图片描述
3、 删除portable下无用的文件跟目录。因为我们的编译环境为gcc,所以只保留gcc目录以及MemMang目录即可。
如下:
在这里插入图片描述
4、删减gcc跟Memmang目录:MemMang只保留heap4.c,而GCC目录只保留ARM_CM4F目录即可。如下:
在这里插入图片描述
5、Application增加FreeRtos文件的编译。

ifeq ($(ENABLE_FREERTOS), yes)
C_DIRS += FreeRTOS/include
C_DIRS += FreeRTOS/portable/GCC/ARM_CM4F
C_DIRS += FreeRTOS/portable/MemMang
endififeq ($(ENABLE_FREERTOS), yes)
C_INCS += FreeRTOS/include
C_INCS += FreeRTOS/portable/GCC/ARM_CM4F
C_INCS += FreeRTOS/portable/MemMang
endif

6、在工程根目录下编译后报错如下:
在这里插入图片描述
提示缺少FreeRTOSConfig.h,这是FreeRTOS的一个配置文件,我们从copy一个出来放在FreeRtos/include目录下。
在这里插入图片描述
7、继续编译。报错如下:
在这里插入图片描述
SystemCoreClock这个变量是system_gd32f30x.c中定义的,所以在FreeRTOS中使用的话,要extern进来。修改
FreeRTOSConfig.h如下
在这里插入图片描述
8、继续编译,报错如下:
在这里插入图片描述
Makefile增加FPU FLOAT-ABI 的编译选项,如下:
在这里插入图片描述

9、继续编译,报错如下:

在这里插入图片描述

提示SVC_Handler PendSV_Handler重重复定义,那么我们屏蔽掉gd32f30x_it.c中的两个函数的定义。
修改如下:
在这里插入图片描述
10、继续编译报错如下:
在这里插入图片描述
屏蔽掉config文件关于钩子函数的选项,修改如下:
在这里插入图片描述
另外,这里改小一点。
在这里插入图片描述

11、继续编译无报错。
12、systick函数的处理。gd 提供的systick初始化就采用了中断的方式,也是1ms中断一次,正好可以给FreeRTOS提供节拍。
所以我们修改gd32f30x_it.c如下:

在这里插入图片描述
在这里插入图片描述

13、继续编译无报错。
14、写个例子试一下吧。

main.c

#define LED1_TASK_PRIO    ( tskIDLE_PRIORITY + 2 )
#define LED2_TASK_PRIO    ( tskIDLE_PRIORITY + 3 )
void LED1_task(void * pvParameters);
void LED2_task(void * pvParameters);void LED1_task(void * pvParameters)
{  for( ;; ){gpio_bit_set(GPIOB, GPIO_PIN_4);vTaskDelay(1000);}
}void LED2_task(void * pvParameters)
{  for( ;; ){gpio_bit_reset(GPIOB, GPIO_PIN_4);vTaskDelay(500);}
}xTaskCreate(LED1_task, "LED1", configMINIMAL_STACK_SIZE, NULL, LED1_TASK_PRIO, NULL);
xTaskCreate(LED2_task, "LED2", configMINIMAL_STACK_SIZE, NULL, LED2_TASK_PRIO, NULL);
/* start scheduler */
vTaskStartScheduler();
15、编译后灯开始闪烁,说明freertos已经正常运行,至此,移植完成。
16、代码路径:https://gitee.com/xiaoguo-tec_0/gd32-iap-code.git

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_492595.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【STC8】热启动串口指令下载

前言 在目标开发板没有装载自动下载电路的时候,往往需要冷启动,也就是需要手动开关电源,来达到单片机复位下载。当然还有一种方法是热启动,通过串口接收到自定义的指令后,软件执行复位下载。这就是本文介绍的内容。 材…

MIT6.824 lecture5上课笔记(涉及到Lab2A)- Go threads and raft

总结:本节课讲解了一些会在lab2中使用到的go的多线程技巧,会给一些简单的demo,lab2中可能会借鉴这些demo。 详细的Lab2 raft算法实现源码,请参考我的个人仓库(记得点颗星星), 配合readme食用更佳。 MIT6.…

【Linux升级之路】3_Linux进程概念

🌟hello,各位读者大大们你们好呀🌟 🍭🍭系列专栏:【Linux升级之路】 ✒️✒️本篇内容:认识冯诺依曼系统,操作系统概念与定位,深入理解进程概念(了解PCB&…

推荐一款C端的低代码产品

目录 写在前面 低代码平台 平台怎么选 各平台区别 为什么选它 写在前面 大家都知道低代码这个叫法是从B端叫起来的,也就是说不管是业务人员还是开发人员,都是企业内部使用。那么有没有C端的,且免费使用的低代码产品呢? 低代码…

若依源码解析:DataScopeAspect实现数据范围的控制

文章目录 源代码使用场景界面操作SysDeptServiceImplSysUserServiceImplSysUserMapperDataScope定义 代码解析Aspect和Component不同的数据权限类型Before通知处理数据范围的方法 源代码 Aspect Component public class DataScopeAspect {/*** 全部数据权限*/public static fi…

springboot旅游资源管理系统门票酒店预订系统_b0a6b

Spring Boot 是 Spring 家族中的一个全新的框架,它用来简化Spring应用程序的创建和开发过程。也可以说 Spring Boot 能简化我们之前采用SSM(Spring MVC Spring MyBatis )框架进行开发的过程。config:主要用来存储配置文件&#…

【学习版】WeDataSphere组件容器化部署实战

WeDataSphere组件容器化部署文档 WeDataSphere是微众银行的大数据开发平台。目前为让用户能够快速体验WeDataSphere所有组件,我们提供一个使用Docker构建的镜像包,里面包括基础组件Hadoop, Spark, Hive, Flink, MySQL。WeDataSphere的组件有DSS&#xff…

【动态规划专栏】--基础-- 动态规划经典题型

目录 动态规划 动态规划思维(基础) 状态表示(最重要) 状态转移方程(最难) 初始化(细节) 填表顺序(细节) 返回值(结果) 1、第 …

[山海关crypto 训练营 day17]

[HNCTF 2022 WEEK3]pnearq 题目代码和数据 from Crypto.Util.number import * from gmpy2 import next_prime from flag import flagp getPrime(1024) q next_prime(p) n p*q e 0x10001 c pow(bytes_to_long(flag), e, n) print(f"n {n}") print(f"c {…

代理、正向代理与反向代理

一、代理 1.1 什么是代理 代理也被叫做网络代理,是一种比较特殊的网络服务,允许一个终端(通常指客户端)通过这个服务与另一个终端(通常指服务器端)进行非直接的连接。例如:一些网关、路由器等…

队列的实现(附含两道经典例题)

🍉文章主页:阿博历练记 📖文章专栏:数据结构与算法 🚍代码仓库:阿博编程日记 🍥欢迎关注:欢迎友友们点赞收藏关注哦🌹 文章目录 🌾前言🎬队列&…

[web安全原理分析]-XXE漏洞入门

前言 XXE漏洞 XXE漏洞全称(XML External Entity Injection)即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、…

国内IEEEXplore访问加速(adblock)

访问IEEEXplore,需要加载一个网页需要等好久,然后才出来,就很奇怪,查到网上有同样这个问题 感谢原博主:ieeexplore加载慢的解决办法 核心原因: 国内无法访问地址: https://cdn.jwplayer.com/…

Redis数据结构——QuickList、SkipList、RedisObjective

承接上文,本文主要介绍QuickList、SkipList、RedisObjective 四、 Redis数据结构-QuickList 问题1:ZipList虽然节省内存,但申请内存必须是连续空间,如果内存占用较多,申请内存效率很低。怎么办? ​ 答&a…

C++入门篇---(命名空间、缺省参数、以及输入、输出)

前言 c 我来了,恭喜牛牛解锁新世界.开启c的学习之旅. 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:讲解C…

pg事务:子事务

什么是子事务? 一般事务只能整体提交或回滚,而子事务允许部分事务回滚。 SAVEPOINT p1 在事务里面打上保存点标记。不能直接提交子事务,子事务也是通过事务的提交而提交。不过可以通过ROLLBACK TO SAVEPOINT p1回滚到该保存点。 子事务在大…

【场景方案】如何去设计并二次封装一个好用的axios,给你提供一个好的参考(1.0版)

文章目录 前言文件结构建议封装的文件结构接口管理文件 二次封装axios的初始配置initutilswebConfig 再封一层环境配置使用 前言 以下演示基于vue3与element-plus 文件结构建议 封装的文件结构 把二次封装axios所有有关的代码全部放在request文件夹中,其中init.js…

【TypeScript】TS中type和interface在类型声明时的区别

🐱 个人主页:不叫猫先生 🙋‍♂️ 作者简介:2022年度博客之星前端领域TOP 2,前端领域优质作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫优质专栏:vue3+vite+typeScript从入门到实践 📢 资料领取:前端进阶资料可以找我免费领取 …

南京邮电大学算法与设计实验二:贪心算法(最全最新,与题目要求一致)

三、实验原理及内容 实验原理: 1、用贪心法实现求两序列的一般背包问题。要求掌握贪心法思想在实际中的应用,分析一般背包的问题特征,选择算法策略并设计具体算法,编程实现贪心选择策略的比较,并输出最优解和最优解值。…

机器学习项目实战-能源利用率 Part-4(模型构建)

博主前期相关的博客可见下: 机器学习项目实战-能源利用率 Part-1(数据清洗) 机器学习项目实战-能源利用率 Part-2(探索性数据分析) 机器学习项目实战-能源利用率 Part-3(特征工程与特征筛选) 这…