【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”,同理是使用了其它系列,则包含对应的头文件即可。
相关文章:

【FreeRTOS】【STM32】03 FreeRTOSConfig.h头文件简介与修改
基于[野火]《FreeRTOS%20内核实现与应用开发实战—基于STM32》.pdf FreeRTOSConfig.h头文件是FreeRTOS各项功能的打开与关闭 FreeRTOSConfig.h头文件简介 之前也说过了,FreeRTOSConfig.h文件可以添加在工程中任意文件夹,只需要在路径中添加好了就行。…...

VScode商店无法访问
下面的方法也许对你没用,也许也有用,但是尝试一下不会有任何副作用。 步骤一: 步骤二:在Proxy代理设置中复制输入 http://127.0.0.1:8080 步骤三:关闭软件,再打开VScode,把http://127.0.0.1:8…...

【UnityUGUI】复合控件详解,你还记得多少
👨💻个人主页:元宇宙-秩沅 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 秩沅 原创 👨💻 收录于专栏:UI_…...

ubuntu下使用gcc编译c程序: “error: stray ‘\357’ in program“
现象: ubuntu下使用gcc编译c程序: “error: stray ‘\357’ in program“ 尝试查找原因:打开从windos直接粘贴c程序到ubuntu的c代码,发现多了 <200b>: 方案:尝试在vim编辑器删除,多出来的字符后编译…...

LeetCode 143.重排链表
题目链接 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目解析 分析题目后我们可以直接进行模拟实现。 具体用到的就是我们之前的知识的结合,首先使用快慢指针找到链表的中间结点。然后将后半段链表给翻转一下,然后再让这…...

不做决策的“RPA机器人”,不是合格的“数字化劳动力”
01 RPA机器人向“数字劳动力”的转变 随着 RPA 技术被广泛应用各行业的不同场景中,再结合以深度学习为代表的 AI 人工智能技术的新一轮发展,RPA 机器人目前已经从仅能处理“单一、重复和标准化的流程”向智能流程自动化的方向发展,从而具备处…...
网页开发中使用highlight.js实现代码高亮 + 行号
一、背景# 笔者在开发这套博客系统时使用 Editormd 作为 Markdown 编辑器,由于不满足其代码高亮的样式,因此选用 highlight.js 插件来实现代码高亮功能。但是,highlight.js 插件不提供行号的设置功能,于是有了该文章。 二、实现…...

访问Apache Tomcat的manager页面
配置访问Tomcat manager页面的用户名、密码、角色 Tomcat安装完成后,包含了一个管理应用,默认安装在 <Tomcat安装目录>/webapps/manager 例如: 要使用管理页面的功能,需要在conf/tomcat-users.xml文件中配置用户、密码及…...
Ubuntu 20.04.6 LTS repo int 提示/usr/bin/env: “python“: 权限不够
这是由于ubuntu20.04默认安装的python3,将python命令配置i为了python3为软连接,此时只需要通过命令添加配置为python软连接即可 sudo ln -s /usr/bin/python3.8 /usr/bin/python 其中/usr/bin/python3.8这个需要看ubuntu下具体的文件,/usr/…...

python随手小练5
1、求1-100的累加和(终止条件 1-100)(while和for两种) #while循环 count 0 index 0 while index < 100:count indexindex 1 print(count)#for循环 sum 0 for i in range(0,101):sum i print(sum)结果: 5050 2…...

一分钟!图片生成32种动画;Adobe绘画工具大升级;复盘Kaggle首场LLM比赛;VR科普万字长文 | ShowMeAI日报
👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🔥 Adobe Firefly 大升级!图像高清、操作便利,体验感拉满 https://firefly.adobe.com Adobe Firefly 升级了&…...
[Framework] Android Handler 工作原理
Android 中的 Handler 都被人说烂了,但是还是想多说一次,因为在 Android 的系统中它真的非常重要而且它的机制并没有很复杂,无论是新手和老手都可以好好学习下,这对理解 Android 系统很重要,所以说学习的性价比非常高。…...

KITTI数据集中的二进制激光雷达数据(.bin文件)转换为点云数据(.pcd文件)(C++代码)
目录 main.cpp CMakeLists.txt main.cpp #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <fstream> #include <iostream> #include <vector>int main() {// Define file pathsstd::string input_filename "/home/f…...
全球AI人工智能领袖:Anthropic联合创始人丹妮拉·阿莫迪!
在创业界中,有许多杰出的女性企业家,而丹妮拉阿莫迪则是其中的佼佼者。作为Anthropic联合创始人,丹妮拉以她的智慧、勇气和远见闻名于世。 她的故事既是启迪,又是励志,让我们一起来看看她的独特之处。 丹妮拉阿莫迪毕…...
CoT 的方式使用 LLM 设计测试用例实践
前期准备 import SparkApi import os from dotenv import load_dotenv, find_dotenv#以下密钥信息从控制台获取_=load_dotenv(find_dotenv()) appid = os.getenv("SPARK_APP_ID") api_secret=os.getenv("SPARK_APP_SECRET") api_key=os.getenv("SPAR…...

神秘的锦衣卫
在看明朝电视剧经常听到的一句台词:锦衣卫办案,闲杂人等速速离开。锦衣卫是明朝特务机构,直接听命于皇帝,是亲军卫之一,也是最重要的一卫。 1、卫所制 卫所制是明代最主要的军事制度,其目标是寓兵于农、屯…...
Springboot中使用Redis
Redis 是一个基于内存的key-value的结构数据库适合存储热点数据 Macos安装Redis https://redis.io/docs/getting-started/installation/install-redis-on-mac-os/安装redis brew install redis查看安装信息: brew info redis前台启动redis: redis-server后台启…...
超声波波形生成电路设计
摘要 随着我国微型电子技术和嵌入式系统的发展,目前行业内相对比较传统的超声波技术无法满足客户的需求。为了改进传统超声波技术在被测设备上的短板问题,在本次毕业设计中,将使用相对先进、快捷、智能的控制机制。该超声波生成控制系统的控制…...

C#和JS交互之Microsoft.ClearScript.V8(V8引擎)
之前测试了很多JS引擎,都只支持es5语法,不支持执行es6,测试了下微软的V8反正能跑通,应该是支持的。还得是微软呀。 如图:安装相关包: 这是参考的官方V8代码 using Microsoft.ClearScript.JavaScript; us…...

9月活动回顾(免费领取PPT)|火山引擎DataLeap、ByteHouse多位专家带来DataOps、实时计算等前沿技术分享!
更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 在上月举行的火山引擎开发者社区 Meetup 第12期暨超话数据专场《数智化转型背景下的火山引擎大数据技术揭秘》上,来自火山引擎DataLeap、EMR、DataSail、…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...

基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
计算机系统结构复习-名词解释2
1.定向:在某条指令产生计算结果之前,其他指令并不真正立即需要该计算结果,如果能够将该计算结果从其产生的地方直接送到其他指令中需要它的地方,那么就可以避免停顿。 2.多级存储层次:由若干个采用不同实现技术的存储…...

CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)
漏洞概述 漏洞名称:Apache Kafka Connect JNDI注入导致的远程代码执行漏洞 CVE编号:CVE-2023-25194 CVSS评分:8.8 影响版本:Apache Kafka 2.3.0 - 3.3.2 修复版本:≥ 3.4.0 漏洞类型:反序列化导致的远程代…...

[KCTF]CORE CrackMe v2.0
这个Reverse比较古老,已经有20多年了,但难度确实不小。 先查壳 upx压缩壳,0.72,废弃版本,工具无法解压。 反正不用IDA进行调试,直接x32dbg中,dump内存,保存后拖入IDA。 这里说一下…...

【QT】qtdesigner中将控件提升为自定义控件后,css设置样式不生效(已解决,图文详情)
目录 0.背景 1.解决思路 2.详细代码 0.背景 实际项目中遇到的问题,描述如下: 我在qtdesigner用界面拖了一个QTableView控件,object name为【tableView_electrode】,然后【提升为】了自定义的类【Steer_Electrode_Table】&…...

STM32CubeMX-H7-19-ESP8266通信(中)--单片机控制ESP8266实现TCP地址通信
前言 上篇文章我们已经能够使用串口助手实现esp8266的几种通信,接下来我们使用单片机控制实现。这篇文章会附带教程,增加.c和,.h,把串口和定时器放到对应的编号,然后调用初始化就可以使用了。 先讲解,然后末尾再放源码…...

Git 使用大全:从入门到精通
Git 是目前最流行的分布式版本控制系统,被广泛应用于软件开发中。本文将全面介绍 Git 的各种功能和使用方法,包含大量代码示例和实践建议。 文章目录 Git 基础概念版本控制系统Git 的特点Git 的三个区域Git 文件状态 Git 安装与配置安装 GitLinuxmacOSWi…...
上位机知识篇---Flask框架实现Web服务
本文将简单介绍Web 服务与前端显示部分,它们基于Flask 框架和HTML/CSS/JavaScript实现,主要负责将实时视频流和检测结果通过网页展示,并提供交互式状态监控。以下是详细技术解析: 一、Flask Web 服务架构 1. 核心路由设计 app.…...