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

news2024/11/24 1:37:12

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
endif

ifeq ($(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.coloradmin.cn/o/549751.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能Python-pythoncuda

PythonCUDA:将Python与GPU相结合的高性能计算工具 介绍 Python是一种简单易学的高级编程语言,而NVIDIA CUDA是一种基于GPU的并行计算平台。两者结合,可以实现高性能计算,Python可以做到数据处理方便快捷,而CUDA则以其强大的并行…

【拼题A】 520 钻石争霸赛 2023 题解

520-1 520无尽爱 分数 5 作者 陈越 单位 浙江大学 《I Love You 1000 Times》是 The Platters 于 2019 年演唱的歌曲。在 520 这个日子里,拼题 A 请你实现一个小功能,把 1000 这个数字换成用户输入的任意一个数字,然后仿照歌名的句式输出表白…

三、Spring boot集成mongodb

文章目录 一、Spring boot集成mongodb1、集成简介2、搭建开发环境2.1 初始化工程2.2 引入依赖2.3 添加配置 3、基于MongoTemplate 开发CRUD3.1 添加实体3.2 实现3.3 添加测试类 4、基于MongoRepository开发CRUD4.1 实现4.2 添加Repository类4.3 添加测试类 一、Spring boot集成…

chatgpt赋能Python-pythondot

PythonDot - 一款强大的SEO工具 作为一名有10年Python编程经验的工程师,我一直在寻找一种能够大大简化我的SEO工作流程的工具。之前我试用了很多SEO工具,但它们要么太昂贵,要么功能太少。最终,我发现了PythonDot - 一款功能强大的…

chatgpt赋能Python-pythonend怎么用

Pythonend:什么是Pythonend以及如何使用它? 介绍 Pythonend是一个能够自动化处理网页和数据的Python框架。它能够处理各种数据来源,比如CSV、Excel、MySQL和SQL Server数据。它还可以从网页中提取数据并将其转换成易于分析的格式。 Python…

C++13-STL模板

C13-STL模板 在线练习: http://noi.openjudge.cn/ https://www.luogu.com.cn/ 大纲要求 【 3 】算法模板库中的函数:min、max、swap、sort 【 4 】栈 (stack)、队列 (queue)、链表 (list)、 向量(vector)等容器 1.函数模板 泛…

真题详解(求叶子结点数)-软件设计(七十九)

真题详解(数字签名算法)-软件设计(七十八)https://blog.csdn.net/ke1ying/article/details/130771043 1、面向对象分析和设计中: 系统内对象和系统外参与者的联系媒介:边界类。 实体类:负责业务和数据逻辑。 控制类&#xff1…

Learn Git Branching 记录

Learning Git Branching 可以说是目前为止最好的教程了,地址 点击右下角问号显示常用命令 1.提交 git commit提交内容,并把这些修改保存成了一个提交记录 C3,C3 的父节点是 C2 修改提交信息 git commit --amend每次 git commit 后都会产生一…

波奇学Linux:指令,指令行解释器和Linux的权限

​ 目录 ​指令和命令行解释器 什么是指令? 什么是命令行解释器? 指令和命令行解释器的作用 Linux的权限 Linux的身份 Linux的权限 权限和身份有关:拥有者,所属组(group),other。 权限…

互联网的出现为创业者提供了一个新的平台,使得创业门槛大大降低,同时也为更多的人提供了机会。然而,在互联网创业的道路上,成功者和失败者之间的差距可能会更加明显。

创意 创业的第一步是找到一个好的创意。这个创意应该是有市场需求的,且你有能力实现它。当然,这个创意不必是全新的,但它必须要有你的创新点。你需要考虑你的目标客户、他们的需求、你的产品或服务如何满足这些需求、竞争情况等因素。因此&a…

物联网技术下的智能照明转型

安科瑞虞佳豪 市场发展瞬息万变,智能照明经过了多年的演变,多次完成了迭代升级,如今逐步向着健康照明、全屋智能照明时代演进。 行业发展:物联网催动智能照明转型 随着万物互联的时代到来,5G和物联网技术的深度结合…

Apache Kafka - 重识消费者

文章目录 概述Kafka消费者的工作原理Kafka消费者的配置Kafka消费者的实现高级API低级API 导图总结 概述 Kafka是一个分布式的消息队列系统,它的出现解决了传统消息队列系统的吞吐量瓶颈问题。 Kafka的高吞吐量、低延迟和可扩展性使得它成为了很多公司的首选消息队…

C++基础语法——模板

1. 泛型编程 在平常的编写中,对于一个实现固定作用的函数,如交换两变量的值的Swap函数,对于不同类型只能编写相对应的重载函数,即 void Swap(int& left, int& right) {int temp left;left right;right temp; }void S…

二叉树的认识(二)

既然要认识二叉树,自然要知道二叉树的基本操作。首先最基本的是要知道二叉树的遍历,所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题(比如:打印节点…

postgresql|数据库|postgresql-12的内置插件pg_stat_statements的启用和使用

前言: 插件就是原软件的扩展功能。postgresql有非常多的各种各样的插件,当然了,插件不安装对于我们使用数据库并没有什么太多的影响,可能只是不舒服一些而已,但有一些插件我们如果有安装,那么,对…

chatgpt赋能Python-pythonfrom

PythonFrom是什么? PythonFrom 是一种基于 Python 语言的开源数据采集与清洗框架,它提供了现代化的数据处理流程,非常适合于爬虫、数据挖掘和机器学习等应用场景。 特点 1. 简单易学 PythonFrom 采用了类似于 SQL 的语法结构,…

Spark Json系列UDF 姿势大全

主要基于jsonpath GitHub - yangyongyongyong/sparkThomasUDF at dev 解决的痛点 每次修改都要写udf函数 重复劳动,所以这里把json中常见的修改和读取都封装起来 场景案例 读取value 数组类型结果 读取value string类型结果 jsonArray 新增 元素 jsonObject 新增/更新 kv对 …

Pycharm安装教程,附详细图解

简介 PyCharm是一款Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如, 调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等等。此外,该IDE提供了一些高级功能&a…

Android RecyclerView实现侧滑删除

距上次写博客有半年多了,回忆起来都觉得不可思议,中间也想憋俩大招,总是被耽误,这俩月忙完之后,终于空下来了,恰好新项目我和UI俩人商量一下,用MD来实现app。中间有个需求是RecyclerView中侧滑显…

node + alipay-sdk 沙箱环境简单测试电脑网站支付

正式上线需要上传营业执照,不知道怎么去申请一个。。。。。 使用沙箱测试,首先前往支付宝开放平台控制台可看到左下方的沙箱测试链接: 然后设置接口加签方式,选择系统默认密钥: 系统默认密钥 -> 公钥模式 -> 查看…