GD32移植FreeRTOS

准备工作

  1. GD32开发板。案例是以梁山派为开发板。
  2. Windows系统的电脑。当前是以Win11的电脑来实现案例的。
  3. Keil开发工具。并且已经安装好GD32依赖环境。
  4. FreeRTOS源码包。下载地址为: Releases · FreeRTOS/FreeRTOS · GitHub

当前以FreeRTOSv202212.01版本为例。也是目前的最新版本。

移植流程

项目基础环境准备

参考: 工程模板创建 · 语雀

新建项目名称为:FreeRTOSTemplate

项目结构如下:

确保以下配置信息的正确性:

  1. Target的配置

  1. Output的配置

  1. C/C++(AC6)配置

  1. Debug配置

FreeRTOS移植

FreeRTOS源码裁剪
  1. 源码解压

  1. 进入FreeRTOS/Source目录。此目录就是我们要移植的源码。

  1. 在你新建的FreeRTOSTemplate工程目录下,新建一个文件夹FreeRTOS,将以上源码拷贝到这个文件夹中。

  1. 删除不必要的文件。来到portable目录只保留GCCMemManag目录

源码目录构建
  1. 新建两个Group:FreeRTOS_CoreFreeRTOS_Port

  1. FreeRTOS_Core添加源码。源码为FreeRTOS根目录下的c文件

  1. FreeRTOS_Port添加源码。源码为FreeRTOS/portable/MemMang下的heap_4.c。源码为FreeRTOS/portable/GCC/ARM_CM4F下的port.c

  1. 添加头文件支持。将FreeRTOS/includeFreeRTOS/portable/GCC/ARM_CM4F添加到头文件依赖中。

FreeRTOSConfig.h文件缺失解决

编译项目,会出现以下错误:

来到FreeRTOS源码目录中,找到FreeRTOSv202212.01\FreeRTOS\Demo\CORTEX_M4F_STM32F407ZG-SK目录中的FreeRTOSConfig.h文件,进行拷贝。

FreeRTOSConfig.h文件拷贝到项目目录中的FreeRTOS目录下

添加头文件引入。将FreeRTOS目录添加到include path中。

SystemCoreClock问题解决

编译项目,会出现以下错误:

来到FreeRTOSConfig.h文件中,观察以下内容:

  1. SystemCoreClock其实是有的
  2. SystemCoreClock在编译预处理前没有被定义出来。原因是extern uint32_t SystemCoreClock;这一段没有进入编译,因为在编译预处理前不满足#ifdef __ICCARM__这个条件。编译器c语言条件不满足。我们将以上代码进行修改。

 FreeRTOSConfig.h修改前的内容

#ifdef __ICCARM__
	#include <stdint.h>
	extern uint32_t SystemCoreClock;
#endif

 FreeRTOSConfig.h修改后的内容

#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)
	#include <stdint.h>
	extern uint32_t SystemCoreClock;
#endif
xxx_Handler问题解决

编译项目,会出现以下错误:

来到gd32f4xx_it.c文件中。修改三个函数SVC_Handler,PendSV_Handler,SysTick_Handler,将函数通过宏定义包裹:

SYS_SUPPORT_OS宏定义

#ifndef SYS_SUPPORT_OS

#endif

修改后如下:

gd32f4xx_it.c文件修改

#ifndef SYS_SUPPORT_OS
void SVC_Handler(void)
{
}
#endif

...

#ifndef SYS_SUPPORT_OS
void PendSV_Handler(void)
{
}
#endif

...
    
#ifndef SYS_SUPPORT_OS
void SysTick_Handler(void)
{
    delay_decrement();
}
#endif

配置C/C++(AC6)中的define为:USE_STDPERIPH_DRIVER,GD32F470,SYS_SUPPORT_OS

vApplicationXXXHook问题解决

编译项目,会出现以下错误:

修改FreeRTOSConfig.h中的配置:

修改configCHECK_FOR_STACK_OVERFLOW

#define configCHECK_FOR_STACK_OVERFLOW	0

修改configUSE_IDLE_HOOK

#define configUSE_IDLE_HOOK				0

修改configUSE_TICK_HOOK

#define configUSE_TICK_HOOK				0

修改configUSE_MALLOC_FAILED_HOOK

#define configUSE_MALLOC_FAILED_HOOK	0
Systick硬件delay

修改systick.c源码,修改如下

systick.c硬件延时

#ifndef SYS_SUPPORT_OS
void delay_1ms(uint32_t count)
{
    delay = count;

    while(0U != delay) {
    }
}
void delay_decrement(void)
{
    if(0U != delay) {
        delay--;
    }
}
#else
void delay_1us(uint32_t count) {
		uint32_t ticks;
		uint32_t told, tnow, reload, tcnt = 0;
		reload = SysTick->LOAD;
		ticks = count * (SystemCoreClock / 1000000);
		told = SysTick->VAL;
		
		while(1) {
				tnow=SysTick->VAL;
				if(tnow != told) {
						if(tnow<told) tcnt+=told-tnow;
						else tcnt+=reload-tnow+told;
						told=tnow;
						
						if(tcnt>=ticks)break;
				}
		}
		
}
void delay_1ms(uint32_t count)
{
    uint32_t i;
    for (i=0; i<count; i++)
    {
        delay_1us(1000);
    }
}
#endif

LED点亮测试

开启任务,点亮PE3PD7

在main.c中编写代码如下:

main.c

#include "gd32f4xx.h"
#include "systick.h"
#include <stdio.h>
#include "main.h"
#include "FreeRTOS.h"
#include "task.h"

TaskHandle_t            StartTask_Handler;
TaskHandle_t            Task1_Handler;
TaskHandle_t            Task2_Handler;

void task1(void *pvParameters) {
	while(1) {
		vTaskDelay(300);
		gpio_bit_set(GPIOE, GPIO_PIN_3);
		vTaskDelay(300);
		gpio_bit_reset(GPIOE, GPIO_PIN_3);
	}
}

void task2(void *pvParameters) {
	while(1) {
		vTaskDelay(1000);
		gpio_bit_set(GPIOD, GPIO_PIN_7);
		vTaskDelay(1000);
		gpio_bit_reset(GPIOD, GPIO_PIN_7);
	}
}

void start_task(void *pvParameters) {
	taskENTER_CRITICAL();
	
	xTaskCreate((TaskFunction_t)task1, 
								(const char*   )"task1",
								50,
								NULL,
								2, 
								(TaskHandle_t*  )&Task1_Handler);
	xTaskCreate((TaskFunction_t)task2, 
								(const char*   )"task2",
								50,
								NULL,
								2, 
								(TaskHandle_t*  )&Task2_Handler);
	vTaskDelete(StartTask_Handler);
								
	taskEXIT_CRITICAL();
}

void GPIO_config() {
		// 1. 时钟初始化
		rcu_periph_clock_enable(RCU_GPIOE);
		// 2. 配置GPIO 输入输出模式
		gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_3);
		// 3. 配置GPIO 模式的操作方式
		gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, GPIO_PIN_3);
	
		// 1. 时钟初始化
		rcu_periph_clock_enable(RCU_GPIOD);
		// 2. 配置GPIO 输入输出模式
		gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_7);
		// 3. 配置GPIO 模式的操作方式
		gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, GPIO_PIN_7);
}


int main(void)
{
    	systick_config();
		GPIO_config();
	
		xTaskCreate((TaskFunction_t)start_task, 
								(const char*   )"start_task",
								128,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
								NULL,
								1, 
								(TaskHandle_t*  )&StartTask_Handler);
		vTaskStartScheduler();
		
		while(1) {}
}

 

HelloWorld

实现多任务串口打印功能。

开发流程:

  1. 通过模板创建项目
  2. 添加串口支持库
  3. 添加所需要c依赖,以及包含所需要h头
  4. 运行测试,查看效果。

main.c

#include "gd32f4xx.h"
#include "systick.h"
#include <stdio.h>
#include "main.h"
#include "FreeRTOS.h"
#include "task.h"
#include "Usart0.h"

TaskHandle_t            StartTask_Handler;
TaskHandle_t            Task1_Handler;
TaskHandle_t            Task2_Handler;

void task1(void *pvParameters) {
	while(1) {
		vTaskDelay(500);
		printf("task 1\n");
	}
}

void task2(void *pvParameters) {
	while(1) {
		vTaskDelay(1000);
		printf("task 2\n");
	}
}

void start_task(void *pvParameters) {
	taskENTER_CRITICAL();
	
	xTaskCreate((TaskFunction_t)task1, 
								(const char*   )"task1",
								50,
								NULL,
								2, 
								(TaskHandle_t*  )&Task1_Handler);
	xTaskCreate((TaskFunction_t)task2, 
								(const char*   )"task2",
								50,
								NULL,
								2, 
								(TaskHandle_t*  )&Task2_Handler);
	vTaskDelete(StartTask_Handler);
								
	taskEXIT_CRITICAL();
}

void Usart0_recv(uint8_t *data, uint32_t len)
{
	printf("recv: %s\n", data);
}

int main(void)
{
        nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);
    	systick_config();
		Usart0_init();
	
		xTaskCreate((TaskFunction_t)start_task, 
								(const char*   )"start_task",
								128,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
								NULL,
								1, 
								(TaskHandle_t*  )&StartTask_Handler);
		vTaskStartScheduler();
		
		while(1) {}
}

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

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

相关文章

SpringMVC-HelloWorld

一、SpringMVC简介 1.1 SpringMVC和三层架构 MVC是一种软件架构思想&#xff0c;将软件按照模型、视图和控制器三个部分划分。 M&#xff1a;model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;用于处理数据。JavaBean分为两类&#xff1a; 实体类Bean&…

网络通信(11)-C#TCP服务端封装帮助类实例

本文使用Socket在C#语言环境下完成TCP服务端封装帮助类的实例。 实例完成的功能: 服务器能够连接多个客户端显示在列表中,实现实时刷新。 服务器接收客户端的字符串数据。 选中列表中的客户端发送字符串数据。 在VS中创建C# Winform项目,编辑界面,如下: UI文件 name…

4030 【例题2】Cashier Employment 出纳员问题(Poj1275Hdu1529)————一本通(提高篇)

今天主要来讲讲差分约束 题目大意&#xff1a; 从0点到23点&#xff0c;给出每个时刻需要的售货员个数&#xff0c;再给出每个时刻应征的售货员个数&#xff0c;然后让你求出满足需求的最小售货员个数 解题思路&#xff1a;差分约束 #include <queue> #include <cs…

Spring 动态数据源事务处理

在一般的 Spring 应用中,如果底层数据库访问采用的是 MyBatis,那么在大多数情况下,只使用一个单独的数据源,Spring 的事务管理在大多数情况下都是有效的。然而,在一些复杂的业务场景下,如需要在某一时刻访问不同的数据库,由于 Spring 对于事务管理实现的方式,可能不能达…

已解决 ValueError: Data cardinality is ambiguous 问题

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通Golang》…

WPF 导航界面悬浮两行之间的卡片 漂亮的卡片导航界面 WPF漂亮渐变颜色 WPF漂亮导航头界面 UniformGrid漂亮展现

在现代应用程序设计中&#xff0c;一个漂亮的WPF导航界面不仅为用户提供视觉上的享受&#xff0c;更对提升用户体验、增强功能可发现性和应用整体效率起到至关重要的作用。以下是对WPF漂亮导航界面重要性的详尽介绍&#xff1a; 首先&#xff0c;引人入胜的首页界面是用户与软…

Redis原理篇(Dict的收缩扩容机制和渐进式rehash)

Dict&#xff08;即字典&#xff09; Redis是一种键值型数据库&#xff0c;其中键与值的映射关系就是Dict实现的。 Dict通过三部分组成&#xff1a;哈希表&#xff08;DictHashTable&#xff09;&#xff0c;哈希节点(DictEntry)&#xff0c;字典&#xff08;Dict&#xff09…

【docker】centos7安装harbor

目录 零、前提一、下载离线包二、安装三、访问四、开机自启 零、前提 1.前提是已经安装了docker和docker-compose 一、下载离线包 1. csdn资源&#xff1a;harbor-offline-installer-v2.10.0.tgz 2. 百度云盘&#xff08;提取码&#xff1a;ap3t&#xff09;&#xff1a;harbo…

Nvidia Jetson AGX Orin使用CAN与底盘通信(ROS C++ 驱动)

文章目录 一、Nvidia Jetson AGX Orin使用CAN通信1.1 CAN使能配置修改GPIO口功能1.2 can收发测试 二、通过CAN协议编写CAN的SocketCan ROS1驱动程序2.1 通讯协议2.2 接收数据节点2.3 发送数据节点2.4 功能包配置 三、ROS2驱动程序 一、Nvidia Jetson AGX Orin使用CAN通信 参考…

python股票分析挖掘预测技术指标知识之蜡烛图指标(6)

本人股市多年的老韭菜&#xff0c;各种股票分析书籍&#xff0c;技术指标书籍阅历无数&#xff0c;萌发想法&#xff0c;何不自己开发个股票预测分析软件&#xff0c;选择python因为够强大&#xff0c;它提供了很多高效便捷的数据分析工具包。 我们已经初步的接触与学习其中数…

Java中的String类:深入分析与高级应用

Java中的String类&#xff1a;深入分析与高级应用 1. String类基础1.1 概述1.2 不可变性的好处1.3 字符串常量池 2. 创建String对象3. String类常用方法4. 内存管理4.1 字符串常量池4.2 intern方法 5. String与StringBuilder/StringBuffer6. 性能考虑7. 结论 Java中的String类是…

【Bootstrap学习 day14】

分页 分页是通过将内容分成单独的页面来组织内容的过程&#xff0c;分页导航一般用于文章列表页&#xff0c;下载列表、图片列表等&#xff0c;由于数据很多&#xff0c;不可能在一页显示&#xff0c;一般分页导航包括上一页&#xff0c;下一页、数字页码等。 基础的分页 要创…

【Python机器学习】线性模型——用于二分类的线性模型

线性模型也广泛用于分类问题&#xff0c;对于二分类问题&#xff0c;可以用以下公式进行预测&#xff1a; yw[0]*x[0]w[1]*x[1]…………w[p]*x[p]b>0 公式与现行回归的公式非常类似&#xff0c;但没有返回特征的加权求和&#xff0c;而是为预测设置了阈值。如果函数值小于…

Unity 欧盟UMP用户隐私协议Android接入指南

Unity 欧盟UMP用户协议Android接入指南 官方文档链接开始接入mainTemplate.gradle 中引入CustomUnityPlayerActivity 导入UMP相关的包java类中新增字段初始化UMPSDK方法调用![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d882171b068c46a1b956e80425f3a9cf.png)测…

Linux操作系统基础(06):Linux的文件类型和颜色

1.Linux文件类型 在Linux系统中&#xff0c;文件类型是指文件的种类或类型&#xff0c;它决定了系统对文件的处理方式&#xff0c;文件类型的作用在于告诉系统如何处理文件&#xff0c;不同类型的文件会有不同的默认行为和处理方式&#xff0c;Linux系统中常见的文件类型包括 …

轻松玩转书生·浦语大模型趣味Demo

轻松玩转书生浦语大模型趣味 Demo 轻松玩转书生浦语大模型趣味 Demo 1 大模型及 InternLM 模型简介 1.1 什么是大模型&#xff1f;1.2 InternLM 模型全链条开源 2 InternLM-Chat-7B 智能对话 Demo 2.1 环境准备2.2 模型下载2.3 代码准备2.4 终端运行2.5 web demo 运行 3 Lagen…

大数据 Hive - 实现SQL执行

文章目录 MapReduce实现SQL的原理Hive的架构Hive如何实现join操作小结 MapReduce的出现大大简化了大数据编程的难度&#xff0c;使得大数据计算不再是高不可攀的技术圣殿&#xff0c;普通工程师也能使用MapReduce开发大数据程序。 但是对于经常需要进行大数据计算的人&#xff…

QT5.14 实现ModbusTCP客户端 Demo

本文在QT5.14平台&#xff0c;基于QModbusClientTcp类&#xff0c;实现了客户端对单个寄存器的读写&#xff0c;用ModbusSlave做服务器做测试。 1.界面 (1)更改读按钮的名称为bt_Read (2)更改写按钮的名称为bt_Write 2.修改pro文件的第三行 greaterThan(QT_MAJOR_VERSION, 4)…

快速幂算法总结

知识概览 快速幂可以在O(logk)的时间复杂度之内求出来的结果。 例题展示 快速幂 题目链接 活动 - AcWing 系统讲解常用算法与数据结构&#xff0c;给出相应代码模板&#xff0c;并会布置、讲解相应的基础算法题目。https://www.acwing.com/problem/content/877/ 代码 #inc…

Rapberry Pi 4 安装VxWorks笔记

Rapberry Pi 4 安装VxWorks笔记 本文章发表与我的github page&#xff1a; Rapberry Pi 4 安装VxWorks笔记 | Hi, I am watershade. Welcome to my pages. 在github page会有更好体验和更多文章。 一、概述 ROS2推荐的操作系统是ubuntu,众所周知&#xff0c;linux并不是实时…
最新文章