【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、…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...