FreeRTOS中“FreeRTOSConfig.h”配置的内容随着版本(功能)的增加而增加,也就是说随着系统功能的增加,对应需要的配置信息也相应增加了。
但是系统为了兼容之前的代码,系统自身做了兼容处理。比如:configUSE_QUEUE_SETS是属于“FreeRTOSConfig.h”中定义的选项,如果用户没有定义,则在“FreeRTOS.h”中有类似如下定义。
开始设计FreeRTOS系统时,工程师们肯定会想到,要尽量减少开发者的开发难度。我们初学移植FreeRTOS时,“FreeRTOSConfig.h”中的大部分配置都选择默认即可。只有后期熟悉了,开发需要使用较多功能的时候,里面各项的配置就必须要熟透。 对英文不反感的朋友建议参考官网的内容,毕竟官网的资料才是最权威的。#ifndef configUSE_QUEUE_SETS#define configUSE_QUEUE_SETS 0#endif
官网地址:
http://www.freertos.org/a00110.html

通用配置
基础配置是需要我们定义的一些配置,也是比较重要的配置。 FreeRTOSConfig.h配置文件牵涉到许多关于系统方面的名词,可能许多初学者不容易理解。比如:信号量、消息队列、互斥锁、事件组······等。 不过不用担心,先有个大概了解,我后期会再次有针对性的重点讲述。 1.configUSE_PREEMPTION调度模式配置
配置为0:合作式调度,即时间片轮流执行;
配置为1:抢占式调度,即优先级高的任务抢先执行;
由于我们要求实时响应,就配置为1,使用抢占式调度方式。否则就发挥不到实时操作系统的作用。 2.configCPU_CLOCK_HZ
CPU时钟,就是我们常说的主频。注意:单位是Hz。
如:STM32F407主频为168M:
3.configTICK_RATE_HZ系统滴答,即系统每秒钟滴答的次数,可以说是系统的心跳,但需要和主频区分开来。系统滴答的值要根据CPU主频来看,一般主频越高,取值相对越大,一般在100至1000之间。 简单举例:系统滴答决定vTaskDelay。
比如:
#define configTICK_RATE_HZ (1000)
则:
vTaskDelay(1000),表示延时1S。 4.configMAX_PRIORITIES
系统最大优先级值
我们创建任务是,配置的优先级值不能超过这个最大值。
xTaskCreate(vAppTask1, "Task1", TASK1_STACK_SIZE, NULL, TASK1_PRIORITY, NULL); 提示:
a.系统优先级和中断优先级原理类似,高优先级的会抢在低优先级的前面,但需要区分系统和中断优先级的应用场景。
b.FreeRTOS中优先级数值越大,优先级越高。而UCOS则相反。 5.configMINIMAL_STACK_SIZE
最小堆栈值
在系统中,一般用于空闲、定时等一些系统任务中,当然,我们有些地方也可以使用这个定义的堆栈值。 注意数值的单位,一般在ARM中为4个字节。 6.configTOTAL_HEAP_SIZE
系统总共堆(栈)大小 我们需要根据需要使用的情况定义这个值。不能定义太小,太小内存容易溢出; 也不能定义太大,有些芯片RAM本身就不大(有些就只有几K),如果太大我们就没法定义太多全局变量,或分配其他堆栈空间。 7.configMAX_TASK_NAME_LEN
任务名称最大长度
也就是创建任务定义任务名称的字符串长度
xTaskCreate(vAppTask1, "Task1", TASK1_STACK_SIZE, NULL, TASK1_PRIORITY, NULL); 提示:结束符 '�'也包含在内。 8.configUSE_16_BIT_TICKS
是否使用16位滴答计数值
配置为0:则使用32位的滴答计数值,一般在32位处理器中都是配置为0;
配置为1:则使用16位的滴答计数值,一般8位或者16位处理器中配置为1。 9.configIDLE_SHOULD_YIELD
是否让空闲任务“放弃”抢占
也就是说在执行与空闲任务相同优先级的任务过程中,空闲任务是否具有抢占的机会。 配置为0:不放弃抢占;
配置为1:放弃抢占; 10.configUSE_MUTEXES
是否使用互斥锁 配置为0:不使用
配置为1:使用 提示:互斥锁也叫互斥信号量,也就是说对资源“加锁”。它的作用是实现多任务间共享资源的独占式处理。简单的说,就是某个资源在某一时刻只允许一个任务处理,处理完之后才允许其他任务处理该资源。 比如:A任务优先级高,B任务优先级低;AB任务都会使用一个串口发送指令数据,(即每次必须发送完成,不能发送到一半就被打断)。 当B任务正在发送数据时,A任务处于就绪状态(要打断B任务)。那么B任务就需要使用互斥锁占有该串口(加锁,占有该资源),等发送完指令,就释放该串口(开锁,释放该资源)。一旦释放了该资源,A任务就可以使用该串口(资源)了。 11.configUSE_RECURSIVE_MUTEXES
是否使用递归互斥锁 配置为0:不使用
配置为1:使用 13.configQUEUE_REGISTRY_SIZE(*)
可添加(或登记)队列名的数量 这个配置信息不好翻译,它主要结合vQueueAddToRegistry与vQueueUnregisterQueue这两个函数使用。 直接上函数接口:
从函数接口可以知道,一个函数是登记(已经创建的)队列的名称;一个函数是注销队列的名称; 其实,主要目的就是给(已经创建的)队列取名,方便调试查找。 提示:很多初学者理解为“可创建队列的最大数”,这个配置参数与其完全不一样的概念。 14.configUSE_QUEUE_SETS(*)void vQueueAddToRegistry(QueueHandle_t xQueue, const char *pcQueueName);void vQueueUnregisterQueue(QueueHandle_t xQueue);
是否使用消息队列“SET”功能 配置为0:不使用
配置为1:使用 这个配置信息也相对较难理解。
提示:网上很多解释为:使能/禁止消息队列。这个理解太笼统,与消息队列配置相关的信息比较多,我个人觉得不正确。 15.configUSE_TIME_SLICING
是否使用时间片进行调度 这个参数结合上面第1各配置参数configUSE_PREEMPTION一起使用。 这个配置参数是在后面新版本增加的,好像在V7版本之前是没有这个配置参数。所以,在FreeRTOSConfig.h配置文件中默认是没有的,而是定义在FreeRTOS.h中。
审核编辑 :李倩
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
参数
+关注
关注
11文章
1870浏览量
34030 -
FreeRTOS
+关注
关注
14文章
499浏览量
67239 -
配置
+关注
关注
1文章
194浏览量
19504
原文标题:FreeRTOS配置文件有哪些基础配置
文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
[VirtualLab] 配置文件编辑工具:速度与精度
配置文件编辑工具,用于定制光场数据采样的设置,在光通过光学系统传播过程中使用
配置文件编辑和运行功能区
**速度与精度 - 工具
**
**奈奎斯特周期评估精度等级
**
场尺寸估计的功率部分
为了估算一
发表于 04-14 08:29
rk3576 android15平台camera编译配置都做了什么?
、芯片平台、产品类型),实现相机相关配置文件、固件、IQ参数文件的条件化拷贝,以及相机专属库的编译打包,最终将这些文件部署到开发板的system/vendor分区,是相机硬件与软件适配的核心配
编写一个生产级的Service配置文件
systemctl start xxx 敲了无数遍,但真要从零写一个 Service 文件丢到生产环境跑,很多人就开始心虚了。网上抄一段配置,Type=simple 还是 forking 搞不清楚
以“网关中间件”实现充电桩OCPP 1.6安全配置文件无缝升级
深圳惠志科技有限公司推出的OCPP安全代理网关采用"网关中间件"架构,在充电桩与云端CSMS之间透明地部署,实现充电桩OCPP 1.6协议安全配置文件从Profile 0/1到Profile 2/3的无缝升级,而无需触及桩端硬件与固件。
配置文件损坏可能会带来哪些安全风险?
配置文件损坏不仅会导致电能质量在线监测装置功能异常,还可能引发 数据安全、运维安全、设备安全、合规安全 四大类安全风险,尤其在电力系统、工业配电等关键场景中,风险可能传导至电网或生产系统,造成
求助各位大佬,关于如何读写编码格式为UTF-16LE的配置文件?
如题,小白求助各位大佬,要怎么实现对编码为UTF-16LE的配置文件的读写。
使用读配置文件的vi读不出内容。
使用读文本的方式写入异常,文件的编码变成UTF-8且内容也不对。
发表于 09-14 12:54
是否有可能使用CYSPP配置文件连接到外围设备?
我们的现有系统使用中央和外围设备,使用基于 Microchip RN4020 的中央和外围设备。 由于供应限制的原因,我们希望将英飞凌 CYBT-483056 SoC 用于 BLE central。 我们想知道是否有可能使用CYSPP配置文件连接到外围设备? 或任何其他请求响应通信方法。
发表于 07-07 06:17
CYW20721 是否支持 HFP、HSP 和 A2DP 配置文件?
我打算使用 CYW20721,以替换我们产品中已经过时的蓝牙模块.
我很想知道 CYW20721 是否支持 HFP、HSP 和 A2DP 配置文件?
发表于 07-04 07:28
CYW920820M2EVB-01开发套件可以与蓝牙的免提配置文件一起使用吗?
我有英飞凌 CYW920820M2EVB-01 开发套件,我想将它与蓝牙的免提配置文件一起使用。 是否可以。 该套件是否支持该配置文件? 我无法在任何地方找到该套件支持的配置文件。 如果是,那么我可以得到一些关于如何执行此操作的
发表于 06-30 06:15
如何才能知道英飞凌Bluetooth®产品支持哪种Bluetooth®配置文件和版本?
如何才能知道英飞凌Bluetooth®产品支持哪种Bluetooth®配置文件和版本?
A2DP、AVRCP、HSP、HFP 等
是否有一个网页或文档解释每个设备支持哪些配置文件和版本?
目前我想了解以下设备特别支持的配置文件
发表于 06-27 06:04
配置文件的差异介绍
配置文件的差异
FA模型应用在config.json文件中描述应用的基本信息,一个应用工程中可以创建多个Module,每个Module中都有一份config.json文件。config.json由
发表于 06-05 06:50
干货分享,profinet转devicenet网关携手伺服驱动的配置技巧
稳联技术devicenet转profinet网关模块WL-PN-DVNM,连接PLC和伺服驱动器的通信配置。首先devicenet不需要组态软件,只需要导入配置文件,即可使用,这也是devicenet协议被越来越多的生产现场选择的优势之一。
为什么在SDK 1.3.5中创建的配置文件是在SDK 1.3.4中创建的 打不开?
为什么在 SDK 1.3.5 中创建的配置文件是在 SDK 1.3.4 中创建的 打不开?
发表于 05-13 07:22
如何在Linux中配置DNS服务器
本文详细介绍了如何在Linux中配置DNS服务器,包括DNS工作原理、本地缓存、DNS查询过程,以及正向和反向查询的配置。步骤包括服务器配置、编辑BIND配置文件、添加解析信息和客户端
FreeRTOS配置文件的通用配置
评论