【FreeRTOS】【STM32】03 FreeRTOSConfig.h头文件简介与修改

基于[野火®]《FreeRTOS%20内核实现与应用开发实战—基于STM32》.pdf

FreeRTOSConfig.h头文件是FreeRTOS各项功能的打开与关闭

FreeRTOSConfig.h头文件简介

之前也说过了,FreeRTOSConfig.h文件可以添加在工程中任意文件夹,只需要在路径中添加好了就行。
该头文件对裁剪整个FreeRTOS 所需的功能的宏均做了定义。

这边是野火电子添加注释版本的FreeRTOSConfig.h,添加了一些中文注释,并且把相关的头文件进行分类,方便查找宏定义已经阅读,详见[野火®]《FreeRTOS%20内核实现与应用开发实战—基于STM32》.pdf

(1)代码清单中的这类标号在[野火®]《FreeRTOS%20内核实现与应用开发实战—基于STM32》.pdf有具体说明

#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H//针对不同的编译器调用不同的 stdint.h 文件
#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__) (1)
#include <stdint.h>
extern uint32_t SystemCoreClock;
#endif//断言#define vAssertCalled(char,int) printf("Error:%s,%d\r\n",char,int)#define configASSERT(x) if((x)==0) vAssertCalled(__FILE__,__LINE__) (2)/************************************************************************* FreeRTOS 基础配置配置选项*********************************************************************//* 置 1:RTOS 使用抢占式调度器;置 0:RTOS 使用协作式调度器(时间片)** 注:在多任务管理机制上,操作系统可以分为抢占式和协作式两种。* 协作式操作系统是任务主动释放 CPU 后,切换到下一个任务。* 任务切换的时机完全取决于正在运行的任务。*/#define configUSE_PREEMPTION 1 (3)//1 使能时间片调度(默认式使能的)#define configUSE_TIME_SLICING 1 (4)/* 某些运行 FreeRTOS 的硬件有两种方法选择下一个要执行的任务:* 通用方法和特定于硬件的方法(以下简称“特殊方法”)。** 通用方法:* 1.configUSE_PORT_OPTIMISED_TASK_SELECTION 为 0 或者硬件不支持这种特殊方法。* 2.可以用于所有 FreeRTOS 支持的硬件* 3.完全用 C 实现,效率略低于特殊方法。* 4.不强制要求限制最大可用优先级数目* 特殊方法:* 1.必须将 configUSE_PORT_OPTIMISED_TASK_SELECTION 设置为 1。* 2.依赖一个或多个特定架构的汇编指令(一般是类似计算前导零[CLZ]指令)。* 3.比通用方法更高效* 4.一般强制限定最大可用优先级数目为 32* 一般是硬件计算前导零指令,如果所使用的,MCU 没有这些硬件指令的话此宏应该设置为 0!*/#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1 (5)/* 置 1:使能低功耗 tickless 模式;置 0:保持系统节拍(tick)中断一直运行 */#define configUSE_TICKLESS_IDLE 0 (6)/** 写入实际的 CPU 内核时钟频率,也就是 CPU 指令执行频率,通常称为 Fclk* Fclk 为供给 CPU 内核的时钟信号,我们所说的 cpu 主频为 XX MHz,* 就是指的这个时钟信号,相应的,1/Fclk 即为 cpu 时钟周期;*/#define configCPU_CLOCK_HZ (SystemCoreClock) (7)//RTOS 系统节拍中断的频率。即一秒中断的次数,每次中断 RTOS 都会进行任务调度#define configTICK_RATE_HZ (( TickType_t )1000) (8)//可使用的最大优先级#define configMAX_PRIORITIES (32) (9)//空闲任务使用的堆栈大小#define configMINIMAL_STACK_SIZE ((unsigned short)128) (10)//任务名字字符串长度#define configMAX_TASK_NAME_LE (16) (11)//系统节拍计数器变量数据类型,1 表示为 16 位无符号整形,0 表示为 32 位无符号整形#define configUSE_16_BIT_TICKS 0 (12)//空闲任务放弃 CPU 使用权给其他同优先级的用户任务#define configIDLE_SHOULD_YIELD 1 (13)//启用队列#define configUSE_QUEUE_SETS 1 (14)//开启任务通知功能,默认开启#define configUSE_TASK_NOTIFICATIONS 1 (15)//使用互斥信号量#define configUSE_MUTEXES 1 (16)//使用递归互斥信号量#define configUSE_RECURSIVE_MUTEXES 1 (17)//为 1 时使用计数信号量#define configUSE_COUNTING_SEMAPHORES 1 (18)/* 设置可以注册的信号量和消息队列个数 */#define configQUEUE_REGISTRY_SIZE 10 (19)#define configUSE_APPLICATION_TASK_TAG 0/*****************************************************************FreeRTOS 与内存申请有关配置选项*****************************************************************///支持动态内存申请#define configSUPPORT_DYNAMIC_ALLOCATION 1 (20)//支持静态内存
#define configSUPPORT_STATIC_ALLOCATION 0//系统所有总的堆大小#define configTOTAL_HEAP_SIZE ((size_t)(36*1024)) (21)/***************************************************************FreeRTOS 与钩子函数有关的配置选项**************************************************************//* 置 1:使用空闲钩子(Idle Hook 类似于回调函数);置 0:忽略空闲钩子** 空闲任务钩子是一个函数,这个函数由用户来实现,* FreeRTOS 规定了函数的名字和参数:void vApplicationIdleHook(void ),* 这个函数在每个空闲任务周期都会被调用* 对于已经删除的 RTOS 任务,空闲任务可以释放分配给它们的堆栈内存。* 因此必须保证空闲任务可以被 CPU 执行* 使用空闲钩子函数设置 CPU 进入省电模式是很常见的* 不可以调用会引起空闲任务阻塞的 API 函数*/#define configUSE_IDLE_HOOK 0 (22)/* 置 1:使用时间片钩子(Tick Hook);置 0:忽略时间片钩子*** 时间片钩子是一个函数,这个函数由用户来实现,* FreeRTOS 规定了函数的名字和参数:void vApplicationTickHook(void )* 时间片中断可以周期性的调用* 函数必须非常短小,不能大量使用堆栈,* 不能调用以”FromISR" 或 "FROM_ISR”结尾的 API 函数*/#define configUSE_TICK_HOOK 0 (23)//使用内存申请失败钩子函数#define configUSE_MALLOC_FAILED_HOOK 0 (24)/** 大于 0 时启用堆栈溢出检测功能,如果使用此功能* 用户必须提供一个栈溢出钩子函数,如果使用的话* 此值可以为 1 或者 2,因为有两种栈溢出检测方法 */#define configCHECK_FOR_STACK_OVERFLOW 0 (25)/********************************************************************FreeRTOS 与运行时间和任务状态收集有关的配置选项**********************************************************************///启用运行时间统计功能#define configGENERATE_RUN_TIME_STATS 0 (26)//启用可视化跟踪调试#define configUSE_TRACE_FACILITY 0 (27)/* 与宏 configUSE_TRACE_FACILITY 同时为 1 时会编译下面 3 个函数* prvWriteNameToBuffer()* vTaskList(),* vTaskGetRunTimeStats()*/#define configUSE_STATS_FORMATTING_FUNCTIONS 1/********************************************************************FreeRTOS 与协程有关的配置选项*********************************************************************///启用协程,启用协程以后必须添加文件 croutine.c#define configUSE_CO_ROUTINES 0 (28)//协程的有效优先级数目#define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) (29)/***********************************************************************FreeRTOS 与软件定时器有关的配置选项**********************************************************************///启用软件定时器#define configUSE_TIMERS 1 (30)//软件定时器优先级#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES-1) (31)//软件定时器队列长度#define configTIMER_QUEUE_LENGTH 10 (32)//软件定时器任务堆栈大小#define configTIMER_TASK_STACK_DEPTH (configMINIMAL_STACK_SIZE*2) (33)/************************************************************FreeRTOS 可选函数配置选项************************************************************/#define INCLUDE_xTaskGetSchedulerState 1 (34)#define INCLUDE_vTaskPrioritySet 1 (35)#define INCLUDE_uxTaskPriorityGet 1 (36)#define INCLUDE_vTaskDelete 1 (37)#define INCLUDE_vTaskCleanUpResources 1#define INCLUDE_vTaskSuspend 1#define INCLUDE_vTaskDelayUntil 1#define INCLUDE_vTaskDelay 1#define INCLUDE_eTaskGetState 1#define INCLUDE_xTimerPendFunctionCall 1/******************************************************************FreeRTOS 与中断有关的配置选项******************************************************************/#ifdef __NVIC_PRIO_BITS#define configPRIO_BITS __NVIC_PRIO_BITS (38)#else#define configPRIO_BITS 4 (39)#endif//中断最低优先级#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15 (40)//系统可管理的最高中断优先级#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5 (41)#define configKERNEL_INTERRUPT_PRIORITY (42)( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )#define configMAX_SYSCALL_INTERRUPT_PRIORITY (43)( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )/****************************************************************FreeRTOS 与中断服务函数有关的配置选项****************************************************************/#define xPortPendSVHandler PendSV_Handler#define vPortSVCHandler SVC_Handler/* 以下为使用 Percepio Tracealyzer 需要的东西,不需要时将configUSE_TRACE_FACILITY 定义为 0 */#if ( configUSE_TRACE_FACILITY == 1 ) (44)#include "trcRecorder.h"#define INCLUDE_xTaskGetCurrentTaskHandle 0 // 启用一个可选函数(该函数被 Trace 源码使用,默认该值为 0 表示不用)#endif#endif /* FREERTOS_CONFIG_H */

FreeRTOSConfig.h 文件修改

一般来说,参照官方DEMO中的文件就可以了

FreeRTOSConfig.h 头文件的内容修改的不多,具体是:修改与对应开发板的头文件 ,如果是使用 STM32F1 ,则包含 F1 的头文件#include “stm32f10x.h”,同理是使用了其它系列,则包含对应的头文件即可。
在这里插入图片描述

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

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

相关文章

【C++】STL总结:理解六大核心组件、各个组件主要功能

文章目录 六大核心组件的关联性1.容器2.迭代器3.算法4. 仿函数 / 函数对象5. 适配器 / 包装器6. 空间配置器 六大核心组件的关联性 1.容器 &#x1f517;&#x1f449;点击跳转 2.迭代器 &#x1f517;&#x1f449;点击跳转 3.算法 &#x1f517;&#x1f449;点击跳转 …

电脑图片jpeg怎么转jpg格式?jpeg和jpg的转换方法

很多平台对上传的图片格式都有严格的要求&#xff0c;当我们遇到图片格式不对的时候&#xff0c;就需要改图片格式了&#xff0c;下面以jpeg转jpg&#xff08;在线图片格式转换器&#xff08;jpg、png、gif、webp、bmp、tiff&#xff09;-压缩图&#xff09;为例子&#xff0c;…

解决 Centos 安装 Python 3.10 的报错: Could not import runpy module

操作环境&#xff1a;CentOS 7、Gcc 4.8.5、Python 3.10.0 系统上已经有 2.x&#xff0c;3.6 版本的 Python 了&#xff0c;但是还是想装一个 3.10 的。因为刚写的脚本文件是较高版本的&#xff0c;在 3.6 上无法正常运行&#xff0c;Python 语法不是很了解&#xff0c;只能从…

Qt中常用容器组控件介绍和实操

目录 常用容器组控件(Containers)&#xff1a; 1.Group Box 2.Scroll Area 3.Tab Widget 4.Frame 5.Dock Widget 常用容器组控件(Containers)&#xff1a; 控件名称依次解释如下(常用的用红色标出&#xff09;: Group Box: 组合框: 提供带有标题的组合框框架Scroll Area…

IntelliJ IDEA Maven 项目的依赖分析

在一个 maven 的项目中&#xff0c;我们需要知道我们的项目中使用的包可能有哪些冲突。 这个在 IntelliJ IDEA 中提供了贴心的查看。 选择 Maven 项目中的分析依赖。 随后&#xff0c;IntelliJ IDEA 将会打开一个依赖分析的标签页。 在这个标签页中&#xff0c;我们可以看到…

【vue富文本插件】tinymce 安装使用及汉化注意项

文章目录 前言一、tinymce 下载安装1.1 npm 安装1.2 提供 CDN 版本免费下载 二、tinymce 本地化三、编写富文本组件四、在其他 .vue 组件中引入上面编写的 myEditor 组件 五、相关问题5.1 汉化5.2 富文本不显示或者黄色文本提示 附&#xff1a;引入第三方拓展啊插件 前言 前端…

Kubernetes----基于kubeadm工具在CentOS7.9虚拟机上部署一主两从类型的1.26版本的Kubernetes集群环境

【原文链接】Kubernetes----基于kubeadm工具在CentOS7.9虚拟机上部署一主两从类型的1.26版本的Kubernetes集群环境 文章目录 一、虚拟机环境准备1.1 准备三台CentOS操作系统的虚拟机1.2 修改主机名1.3 确认CentOS的版本符合要求1.4 配置地址解析1.5 配置时间同步1.6 关闭防火墙…

c++ 学习之 强制类型转换运算符 const_cast

看例子怎么用 int main() {int a 1;int* p a;// 会发生报错// 如果学着 c的风格类型转换int* pp (int*)a;*pp 1; // 编译不报错&#xff0c;但是运行报错// const_castconst int n 5;const std::string s "lalal";// const cast 只针对指针&#xff0c;引用&…

Navicat如何连接远程服务器的MySQL

参考:https://blog.csdn.net/a648119398/article/details/122420906 1.Navicat for Mysql 2.腾讯云轻量级服务器一台&#xff08;Centos 7&#xff09; 3.Mysql 8.0.24&#xff08;远程服务器内安装的&#xff09; 4.Xshell7&#xff08;连接操作远程服务器&#xff09; 一、修…

电子书制作软件Vellum mac中文版特点

Vellum mac是一款专业的电子书制作软件&#xff0c;它可以帮助用户将文本文件转换为高质量的电子书&#xff0c;支持多种格式&#xff0c;包括EPUB、MOBI、PDF等。Vellum具有直观的用户界面和易于使用的工具&#xff0c;可以让用户快速地创建和发布电子书。 Vellum mac软件特点…

FPGA---UDP通信求助

项目场景&#xff1a; 使用UDP进行回环&#xff0c;网络调试助手&#xff0c;发送数据通过UDP接收模块接收&#xff0c;解析出数据&#xff0c;给到UDP发送模块&#xff0c;传回上位机。 问题描述 UDP接收模块中&#xff0c;接收到的CRC校验值与自己计算CRC校验值进行判断&am…

OpenCV实现图像傅里叶变换

傅里叶变换 dftcv.dft(img_float32,flagscv.DFT_COMPLEX_OUTPUT): flags:标志位&#xff0c;指定变换类型&#xff0c;cv.DFT_COMPLEX_OUTPUT会返回复数结果。 傅立叶变换&#xff0c;将输入的图像从空间域转换到频率域。 返回结果: 此函数返回一个复杂数值数组&#xff0c…

c++ 类的特殊成员函数:移动构造函数(五)

1. 简介 移动构造函数是C11中的新特性&#xff0c;它允许对象通过移动而不是复制来传递和初始化。移动构造函数通常用于提高性能&#xff0c;因为它避免了不必要的复制操作&#xff0c;特别是当处理大型对象或使用动态内存分配时。 2. 来源 当拷贝构造函数出现函数返回值 &a…

LeetCode(力扣)416. 分割等和子集Python

LeetCode416. 分割等和子集 题目链接代码 题目链接 https://leetcode.cn/problems/partition-equal-subset-sum/ 代码 class Solution:def canPartition(self, nums: List[int]) -> bool:sum 0dp [0]*10001for num in nums:sum numif sum % 2 1:return Falsetarget …

【Vuex+ElementUI】Vuex中取值存值以及异步加载的使用

一、导言 1、引言 Vuex是一个用于Vue.js应用程序的状态管理模式和库。它建立在Vue.js的响应式系统之上&#xff0c;提供了一种集中管理应用程序状态的方式。使用Vuex&#xff0c;您可以将应用程序的状态存储在一个单一的位置&#xff08;即“存储”&#xff09;中&#xff0c;…

MySQL数据生成工具mysql_random_data_load

在看MySQL文章的时候偶然发现生成数据的工具&#xff0c;此处直接将软件作者的文档贴了过来&#xff0c;说明了使用方式及下载地址 Random data generator for MySQL Many times in my job I need to generate random data for a specific table in order to reproduce an is…

Flutter_Slider_SliderTheme_滑杆/滑块_渐变色

调用示例以及效果 SliderTheme(data: SliderTheme.of(context).copyWith(trackHeight: 3,// 滑杆trackShape: const GradientRectSliderTrackShape(radius: 1.5),// 滑块thumbShape: const GradientSliderComponentShape(rectWH: 14, overlayRectSpace: 4, overlayColor: Colou…

Linux sed命令

在Linux系统中&#xff0c;有许多强大的文本处理工具&#xff0c;其中之一就是sed&#xff08;Stream Editor&#xff09;命令。sed是一个用于对文本进行编辑、替换、删除和过滤操作的命令行工具&#xff0c;一次处理一行内容。它具有强大的正则表达式支持和灵活的文本处理功能…

智能电表线路单回路双回路的区别

随着科技的发展和能源管理的需求&#xff0c;智能电表已经成为电力系统中不可或缺的一部分。智能电表可以通过数据通信网络将用电信息实时传输到电力公司&#xff0c;为电力公司提供更精确、实时的用电数据&#xff0c;同时也可以为用户提供更加智能化的用电服务。 在智能电表…

Peter算法小课堂—DP背包问题

大家好&#xff0c;我是Peter&#xff0c;我又来啦&#x1f388;&#x1f384;✨ &#x1f388;&#x1f9e8;&#x1f389;《动态规划》专栏来啦&#xff0c;目前为止&#xff0c;此专栏已经有四篇文章啦&#x1f381;&#x1f380;&#x1f384; 1.DP概念与编程方法 DP概念…