【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.mzph.cn/news/102262.shtml

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

相关文章

【C++初阶】前言——C++的发展简述及学习方法分享

主页点击直达&#xff1a;个人主页 我的小仓库&#xff1a;代码仓库 C语言偷着笑&#xff1a;C语言专栏 数据结构挨打小记&#xff1a;初阶数据结构专栏 Linux被操作记&#xff1a;Linux专栏 LeetCode刷题掉发记&#xff1a;LeetCode刷题 算法&#xff1a;算法专栏 C头…

取消加考!自考专业调整,2026年起执行新计划!

就在2023年10月7日&#xff0c;广东省教育考试院发布《关于广东省高等教育自学考试专业调整有关事项的通知》&#xff0c;自学考试迎来新变化&#xff0c;本次专业调整政策性强&#xff0c;涉及面广&#xff0c;持续时间长&#xff0c;一起来看看具体说明~ 关于广东省高等教育自…

【码银送书第八期】《Python数据挖掘:入门进阶与实用案例分析》

摘要&#xff1a;本案例将主要结合自动售货机的实际情况&#xff0c;对销售的历史数据进行处理&#xff0c;利用pyecharts库、Matplotlib库进行可视化分析&#xff0c;并对未来4周商品的销售额进行预测&#xff0c;从而为企业制定相应的自动售货机市场需求分析及销售建议提供参…

模拟大数相加

字符串的大数相加&#xff0c;不可以直接使用stoi&#xff0c;或者stoll这种函数去相加&#xff0c;随时有可能越界。只需要模拟计算加法的过程就可以了。 1.定义两个尾指针&#xff0c;指向num1,nums2的最后一个数字&#xff0c;让这两个数字相加&#xff0c;并把相加的结果记…

易点易动设备管理系统:打通采购管理的智能化设备管理解决方案

在现代企业的运营中&#xff0c;设备管理是一个关键的环节。传统的设备管理方法往往效率低下&#xff0c;导致设备故障频发、巡检和维修工作不协调&#xff0c;备件管理不规范。为了解决这些问题&#xff0c;我们引入了易点易动设备管理系统&#xff0c;它能够全面管理设备的生…

华为云云耀云服务器L实例评测 | 实例评测使用之硬件参数评测:华为云云耀云服务器下的 Linux 网络监控神器 bmon

华为云云耀云服务器L实例评测 &#xff5c; 实例评测使用之硬件参数评测&#xff1a;华为云云耀云服务器下的 Linux 网络监控神器 bmon 介绍华为云云耀云服务器 华为云云耀云服务器 &#xff08;目前已经全新升级为 华为云云耀云服务器L实例&#xff09; 华为云云耀云服务器是什…

前端笔记:Create React App 初始化项目的几个关键文件解读

1 介绍 Create React App 是一个官方支持的方式&#xff0c;用于创建单页应用的 React 设置用于构建用户界面的 JAVASCRIPT 库主要用于构建 UI 2 项目结构 一个典型的 Create React App 项目结构如下&#xff1a; ├── package.json ├── public # 这…

Python使用MySQL,无记录则插入,有记录则更新 - ON DUPLICATE KEY UPDATE

一、基本语法 ON DUPLICATE KEY UPDATE 语句基本功能是&#xff1a;当表中没有原来记录时&#xff0c;就插入&#xff0c;有的话就更新。 使用注意事项如下&#xff1a; ON DUPLICATE KEY UPDATE语句根据主键id或唯一键来判断当前插入是否已存在。记录已存在时&#xff0c;只…

git删除文件

qt中点击删除文件后&#xff0c;不要从git版本控制中删除此文件 git rm test.txt 然后git add&#xff0c;git commit-m""

Linux 测试端口是否放行

Linux 测试端口是否放行 1、准备2、在 CentOS 7 上放行端口&#xff0c;你可以使用以下方法&#xff1a;4、错误解决&#xff1a;[rootlocalhost backup]# netcat -l -p 11111 netcat: cannot use -p and -l 装了netcat不能用5、能用telnet去测试吗6、效果&#xff1a; 1、准备…

STM32 PA15/JTDI 用作普通IO,烧录口不能使用问题解决

我们一般用SW调试接口 所以DEBUG选择Serial Wire 这样PA15可以用作普通IO使用。 工程中默认加上&#xff1a; PA13(JTMS/SWDIO).ModeSerial_Wire PA13(JTMS/SWDIO).SignalDEBUG_JTMS-SWDIO PA14(JTCK/SWCLK).ModeSerial_Wire PA14(JTCK/SWCLK).SignalDEBUG_JTCK-SWCLK

Flink---14、Flink SQL(SQL-Client准备、流处理中的表、时间属性、DDL)

星光下的赶路人star的个人主页 你生而真实&#xff0c;而非完美 文章目录 1、Flink SQL1.1 SQL-Client准备1.1.1 基于yarn-session模式1.1.2 常用配置 1.2 流处理中的表1.2.1 动态表和持续查询1.2.2 将流转换为动态表1.2.3 用SQL持续查询1.2.4 将动态表转换为流 1.3 时间属性1.…

什么是存储服务器?

随着互联网的发展&#xff0c;越来越多的信息会在网络上暴露&#xff0c;所以企业就会更加重视数据&#xff0c;因此更加安全可靠的数据存储服务器受到了大多数人的信赖&#xff0c;今天就让小编带大家了解一下什么是存储服务器吧&#xff01; 存储服务器的含义。存储服务器是…

oracle connect by详解

1、作用&#xff1a; 用于存在父子&#xff0c;祖孙&#xff0c;上下级等层级关系的数据表进行层级查询。 2、语法 SELECT ... FROM .... START WITH cond1 CONNECT BY cond2 WHERE cond3;2.1、说明 start with: 指定起始节点的条件 connect by: 指定父子行的条件关系 …

如何在 Spring Boot 中实现容错机制

在 Spring Boot 中实现容错机制 容错机制是构建健壮和可靠的应用程序的重要组成部分。它可以帮助应用程序在面对异常或故障时保持稳定运行。Spring Boot提供了多种机制来实现容错&#xff0c;包括异常处理、断路器、重试和降级等。本文将介绍如何在Spring Boot中实现这些容错机…

c#设计模式-行为型模式 之 迭代器模式

&#x1f680;简介 提供一个对象来顺序访问聚合对象中的一系列数据&#xff0c;而不暴露聚合对象的内部表示。 迭代器模式主要包含以下角色&#xff1a; 抽象聚合&#xff08;Aggregate&#xff09;角色&#xff1a;定义存储、添加、删除聚合元素以及创建迭代器对象的接口…

Spring Boot项目在Windows上的自启动策略与Windows自动登录配置

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

如何压缩视频?视频压缩变小方法汇总

视频是我们日常生活中不可或缺的一部分&#xff0c;但视频文件往往会占用大量存储空间&#xff0c;这在传输和分享过程中可能成为一个瓶颈。 为了解决这一问题&#xff0c;我们可以通过压缩的方式减小视频大小&#xff0c;视频压缩是指在保证视频质量的前提下&#xff0c;通过…

漏洞复现--鸿运主动安全监控云平台任意文件下载

免责声明&#xff1a; **文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何…

Centos8 openjdk升级

1、卸载旧版本 sudo dnf remove java-1.8.0-openjdk 2、搜索新版本 yum search java-11-openjdk3、安装新版本 dnf install java-11-openjdk.x86_644、验证新版本 java -version