FreeRTOS移植到GD32

news2024/10/4 18:33:40

目录

一、GD32基础工程创建:

1、创建如下文件夹

2、在keil5创建工程

3、在工程添加相关.c文件和头文件路径

4、实例:实现LED闪烁功能

二、在基础工程添加FreeRTOS:

1、FreeRTOS中的文件:

2、添加的源文件:

3、添加的头文件路径:

4、在main()函数中创建StartTask任务,用于创建其它任务:

5、在StartTask任务硬件初始化,并且创建其它任务:

6、SysTick_Handler 中断处理函数,主要涉及任务切换:

三、FreeRTOS系统配置:

1、FreeRTOSConfig.h文件的宏

2、FreeRTOSConfig.h和FreeRTOS.h的区别:


一、GD32基础工程创建:

1、创建如下文件夹

(1) CMSIS中的文件:

(2) FwLibrary中的文件:

(3) USER中的文件:

2、在keil5创建工程

输入工程名和选择工程存放路径:

选择芯片型号:

3、在工程添加相关.c文件和头文件路径

4、实例:实现LED闪烁功能

(1) main.c实现硬件初始化,并且调用App相关功能实现具体业务:

(2) LedApp.c 调用led.c,实现闪烁这个模块的功能:

(3) led.c 为最底层硬件实现,被App层调用:

(4) 注意:添加了 systick初始化之后,要编写其对应的中断处理函数SysTick_Handler,否则程序无法正常运行:

二、在基础工程添加FreeRTOS:

1、FreeRTOS中的文件:

2、添加的源文件:

3、添加的头文件路径:

4、在main()函数中创建StartTask任务,用于创建其它任务:

5、在StartTask任务硬件初始化,并且创建其它任务:

Mian_Srever_Task任务的实现:

LED_Server_Task任务的实现:

6、SysTick_Handler 中断处理函数,主要涉及任务切换:

注意systick的初始化和SysTick_Handler中断函数的处理。

三、FreeRTOS系统配置:

1、FreeRTOSConfig.h文件的宏

(1) 作用:“config”开始的宏和“INCLUDE_”开始的宏一样,都是用来完成 FreeRTOS 的配置和裁剪的。

(2) 常用宏的配置:

①configUSE_PREEMPTION

configUSE_PREEMPTION=1时FreeRTOS系统为抢占式内核,configUSE_PREEMPTION=0时,使用协程内核。协程内核可以节省开销,但是功能有限。协程内核主要是针对以前性能较低的MCU使用的,但现在的MCU功能都比较强,所以不需要使用协程内核。

②configCPU_CLOCK_HZ

设置CPU频率,一般来说配置为和MCU相同的主频。

③configTICK_RATE_HZ

设置系统时钟节拍频率,该频率就是滴答定时器的中断频率,该中断频率最小单位为1us。不过一般是1000us,即1ms。

④configMAX_PRIORITIES

可使用的最大优先级数量,设置完成以后就可以设置任务优先级,但必须在0~(configMAX_PRIORITIES-1)区间内,其中0为最低优先级,configMAX_PRIORITIES-1为最高优先级。一般来说,最低优先级只分配给空闲任务,最高优先级只分配给软件定时器,所以实际可供用户使用的优先级数量为configMAX_PRIORITIES-2。数值越大,优先级越高。

注意:FreeRTOS 任务优先级共有 256 级,如果优先级大于最大优先级那就为最大优先级,一般不要改大优先级会占用内存。

⑤6configMINIMAL_STACK_SIZE

空闲任务使用的堆栈大小,要注意这个大小的单位不一定是1byte,比如说stm32是32位单片机,那么大小的单位就是4byte,当configMINIMAL_STACK_SIZE=100时,就相当于空闲任务堆栈大小为400byte。

⑥configMAX_TASK_NAME_LEN

任务名字符串长度,用户根据自己需要设定。

⑦configUSE_16_BIT_TICKS

系统节拍计数器变量数据类型,根据自己使用的是多少位的单片机来做修改,stm32是32位MCU,所以选择32位。下图是其定义:

从中可以看到,当configUSE_16_BIT_TICKS=1时,定义系统节拍计数器变量类型为16位,否则为32位。

⑧configIDLE_SHOULD_YIELD

选择空闲任务是否放弃CPU使用权给其他同优先级的用户任务,configIDLE_SHOULD_YIELD=1,让出CPU使用权给其他同级任务;否则不会让出。一般来说我们会置一。因为如果不使能的话,可能会导致有些用户任务运行的时间变少。

⑨configUSE_MUTEXES

configUSE_MUTEXES=1时,使用互斥信号量。相关函数将会被编译。

⑩configUSE_RECURSIVE_MUTEXES

configUSE_RECURSIVE_MUTEXES=1,使用互斥递归信号量,相关函数将会被编译。

⑪configUSE_COUNTING_SEMAPHORES

configUSE_COUNTING_SEMAPHORES=1,启用计数型信号量,相关函数会被编译。

⑫configQUEUE_REGISTRY_SIZE

configQUEUE_REGISTRY_SIZE = 1,启用队列记录,用以记录队列和信号量的最大数量,在使用内核调试器的时候可以查看该记录。

⑬configUSE_QUEUE_SETS

用于设置是否启动队列,为1启动

⑭configUSE_TIME_SLICING(定义在FreeRTOS.h文件)

基于时间片的抢占式调度:
configUSE_PREEMPTION=1
configUSE_TIME_SLICING=1(默认为1)

当宏configUSE-TIME-SLICING定义为1的时候多个任务可以共用一个优先级,数量不限。此时处于就绪态的优先级相同的任务就会使用时间片轮转调度器获取运行时间。

2、FreeRTOSConfig.h和FreeRTOS.h的区别:

FreeRTOSConfig.h 是一个用户级别的配置文件,不属于内核文件。每个用户可以有不同的FreeRTOSConfig.h,从而实现不同的功能配置。

FreeRTOS.h内核头文件,绝大多数配置选项都是根据宏值来对 FreeRTOS 进行配置的。

联系:FreeRTOS.h 通过检查 FreeRTOSConfig.h 用户级别的配置文件来实现对 FreeRTOS 的配置。这样,既实现了灵活配置,又保证了所有用户就只有 FreeRTOSConfig.h 不同,而不需要修改内核源码。

具体实现:FreeRTOS.h这个头文件,它会#include FreeRTOSConfig.h,并通过 #if 判断对应常量是否被定义,来决定是否启用对应的功能。

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

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

相关文章

机器人常用传感器分类及一般性要求

机器人传感器的分类 传感技术是先进机器人的三大要素(感知、决策和动作)之一。根据用途不同,机器人传感器可以分为两大类:用于检测机器人自身状态的内部传感器和用于检测机器人相关环境参数的外部传感器。 内部传感器 内部传感…

【JavaEE】_HTML常用标签

目录 1.HTML结构 2. HTML常用标签 2.1 注释标签 2.2 标题标签:h1~h6 2.3 段落标签:p 2.4 换行标签:br 2.5 格式化标签 2.6 图片标签:img 2.7 超链接标签:a 2.8 表格标签 2.9 列表标签 2.10 表单标签 2.10…

航班进出港|航班进出港管理系统|基于springboot航班进出港管理系统设计与实现(源码+数据库+文档)

航班进出港管理系统目录 目录 基于springboot航班进出港管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 5、航班信息管理 (1) 航班信息管理 (2)起飞降落申请管理 (3)公告管理 &…

辽宁博学优晨教育科技有限公司视频剪辑培训专业之选

随着数字时代的到来,视频剪辑技术已成为各行各业不可或缺的一项技能。为了满足市场需求,辽宁博学优晨教育科技有限公司(以下简称“博学优晨”)推出了专业的视频剪辑培训课程,旨在为广大学员提供系统、高效的学习机会。…

AMD FPGA设计优化宝典笔记(4)复位桥

高亚军老师的这本书《AMD FPGA设计优化宝典》,他主要讲了两个东西: 第一个东西是代码的良好风格; 第二个是设计收敛等的本质。 这个书的结构是一个总论,加上另外的9个优化,包含的有:时钟网络、组合逻辑、触…

面试系列之《Spark》(持续更新...)

1.job&stage&task如何划分? job:应用程序中每遇到一个action算子就会划分为一个job。 stage:一个job任务中从后往前划分,分区间每产生了shuffle也就是宽依赖则划分为一个stage,stage这体现了spark的pipeline思…

picker选择器-年月日选择

从底部弹起的滚动选择器。支持五种选择器,通过mode来区分,分别是普通选择器,多列选择器,时间选择器,日期选择器,省市区选择器,默认是普通选择器。 学习一下日期选择器 平台差异说明 日期选择默…

k8s学习(RKE+k8s+rancher2.x)成长系列之简配版环境搭建(三)

3.19.切换RKE用户,并做免密登录(三台机器相互免密) su rke cd~ ssh-keygen[rke@master.ssh]$ssh-copy-id rke@slaver2 [rke@master.ssh]$ssh-copy-id rke@slaver1 [rke@master.ssh]$ssh-copy-id rke@master3.20.搭建RKE集群 为了方便理解,我们把通RKE部署的Kubernetes集群称…

浏览网页记录工具,企业如何查看员工网页浏览记录

随着信息技术的飞速发展,网络已成为企业日常运营和员工工作中不可或缺的一部分。然而,随之而来的是网络安全和员工上网行为管理的挑战。在这种情况下,浏览网页记录工具成为了企业监控员工上网行为的重要手段之一。 一、浏览网页记录工具的重要…

MySQL 基础知识(十)之 MySQL 架构

目录 1 MySQL 架构说明 2 连接层 3 核心业务层 3.1 查询缓存 3.2 解析器 3.3 优化器 3.4 执行器 4 存储引擎层 5 参考文档 1 MySQL 架构说明 下图是 MySQL 5.7 及其之前版本的逻辑架构示意图 MySQL 架构大致可分为以下三层: 连接层:负责跟客户…

unity学习(29)——GameInfo角色信息

1.把GameInfo.cs PlayerModel.cs Vector3.cs Vector4.cs PlayerStateConstans.cs GameState.cs依次粘到model文件夹中,此时项目没有错误,如下图所示; 对应处所修改的代码如下: case LoginProtocol.LOGIN_SRES://1 {Debug.Log(&qu…

软件工程师,AI手机元年到来,我们怎么办

概述 OPPO创始人、总裁、CEO陈明永在2024年2月18日发表了名为《开启AI手机新时代》的内部信。陈明永认为:“2024年是AI手机元年。未来五年,AI对手机行业的影响,完全可以比肩当年智能手机替代功能机”。他预测AI手机时代将成为继功能机、智能手…

docker jenkins 报错:script.sh.copy: 1: mvn: not found

找不到mvn,一般是没配置环境变量的问题。点开系统配置,设置环境变量即可

Python教程(27)——如何使用Python中的上下文管理器

当我们在编写代码时,经常会遇到需要管理资源的情况,比如打开和关闭文件,如果遇到了一些异常情况,我们需要关闭资源,不然会导致资源泄露,虽然我们可以通过手动的方式来关闭,但如果有多个异常情况…

(十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)

简述 操作路径如下: 作用:通过逐步增加线程数来模拟用户并发访问。配置:设置This group will start、First,wait for 、Then start、Next , add等参数。使用场景:模拟逐步增长的并发访问,观察应用程序的性能变化。优点:适用于测试应用程序在逐步增加负载下的性能表现。…

【STM32 物联网】AT指令的介绍

文章目录 前言一、什么是AT指令二、使用AT指令需要注意什么 三、AT指令的分类和提示信息3.1 AT指令的分类3.2 是否保存到Flash的含义3.3 提示信息 总结 前言 本系列STM32物联网使用的为esp8266-01S作为通信模块 在物联网(IoT)应用中,通信模…

【Java大数据期末】银行管理系统(MySQL数据库)

诚接C语言、C、Java、Python、HTML、JavaScript、vue、MySQL相关编程作业, 标价10-20每份,如有需要请加文章最下方QQ。 本文资源:https://download.csdn.net/download/weixin_47040861/88850902https://download.csdn.net/download/weixin_4…

四旋翼无人机控制-零散笔记整理

四旋翼无人机控制-零散笔记整理 说明仿真框架 说明 这是低创文章,本意是整理本科留下来的一堆零碎的纸质笔记,整理完就把纸质的扔了。所以前后不连贯,也可能有错误,图片都是直接拍的笔记照片,很丑。如果想系统学习的可…

OpenAI划时代大模型——文本生成视频模型Sora作品欣赏(二)

Sora介绍 Sora是一个能以文本描述生成视频的人工智能模型,由美国人工智能研究机构OpenAI开发。 Sora这一名称源于日文“空”(そら sora),即天空之意,以示其无限的创造潜力。其背后的技术是在OpenAI的文本到图像生成模…

书生开源大模型训练营-第3讲笔记

5.Langchain和InternLM搭建知识库 5.1环境 还是一样,开发机中创建镜像,以及所需依赖 pip install modelscope1.9.5 pip install transformers4.35.2 pip install streamlit1.24.0 pip install sentencepiece0.1.99 pip install accelerate0.24.15.2模…