0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FreeRTOS配置文件的通用配置

strongerHuang 来源:strongerHuang 作者:strongerHuang 2022-06-15 09:11 次阅读

FreeRTOS中“FreeRTOSConfig.h”配置的内容随着版本(功能)的增加而增加,也就是说随着系统功能的增加,对应需要的配置信息也相应增加了。

但是系统为了兼容之前的代码,系统自身做了兼容处理。比如:configUSE_QUEUE_SETS是属于“FreeRTOSConfig.h”中定义的选项,如果用户没有定义,则在“FreeRTOS.h”中有类似如下定义。


#ifndef configUSE_QUEUE_SETS  #define configUSE_QUEUE_SETS 0#endif
开始设计FreeRTOS系统时,工程师们肯定会想到,要尽量减少开发者的开发难度。我们初学移植FreeRTOS时,“FreeRTOSConfig.h”中的大部分配置都选择默认即可。只有后期熟悉了,开发需要使用较多功能的时候,里面各项的配置就必须要熟透。 对英文不反感的朋友建议参考官网的内容,毕竟官网的资料才是最权威的。

官网地址:

http://www.freertos.org/a00110.html

465c9790-ec46-11ec-ba43-dac502259ad0.gif

通用配置

基础配置是需要我们定义的一些配置,也是比较重要的配置。 FreeRTOSConfig.h配置文件牵涉到许多关于系统方面的名词,可能许多初学者不容易理解。比如:信号量、消息队列、互斥锁、事件组······等。 不过不用担心,先有个大概了解,我后期会再次有针对性的重点讲述。 1.configUSE_PREEMPTION
调度模式配置
配置为0:合作式调度,即时间片轮流执行;
配置为1:抢占式调度,即优先级高的任务抢先执行;
由于我们要求实时响应,就配置为1,使用抢占式调度方式。否则就发挥不到实时操作系统的作用。 2.configCPU_CLOCK_HZ
CPU时钟,就是我们常说的主频。注意:单位是Hz。
如:STM32F407主频为168M:
#define configCPU_CLOCK_HZ      (168000000)
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这两个函数使用。 直接上函数接口:
void vQueueAddToRegistry(QueueHandle_t xQueue, const char *pcQueueName);void vQueueUnregisterQueue(QueueHandle_t xQueue);
从函数接口可以知道,一个函数是登记(已经创建的)队列的名称;一个函数是注销队列的名称; 其实,主要目的就是给(已经创建的)队列取名,方便调试查找。 提示:很多初学者理解为“可创建队列的最大数”,这个配置参数与其完全不一样的概念。 14.configUSE_QUEUE_SETS(*)
是否使用消息队列“SET”功能 配置为0:不使用
配置为1:使用 这个配置信息也相对较难理解。
提示:网上很多解释为:使能/禁止消息队列。这个理解太笼统,与消息队列配置相关的信息比较多,我个人觉得不正确。 15.configUSE_TIME_SLICING
是否使用时间片进行调度 这个参数结合上面第1各配置参数configUSE_PREEMPTION一起使用。 这个配置参数是在后面新版本增加的,好像在V7版本之前是没有这个配置参数。所以,在FreeRTOSConfig.h配置文件中默认是没有的,而是定义在FreeRTOS.h中。
#ifndef configUSE_TIME_SLICING  #define configUSE_TIME_SLICING 1#endif

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 参数
    +关注

    关注

    11

    文章

    1838

    浏览量

    32252
  • FreeRTOS
    +关注

    关注

    12

    文章

    484

    浏览量

    62208
  • 配置
    +关注

    关注

    1

    文章

    188

    浏览量

    18396

原文标题:FreeRTOS配置文件有哪些基础配置

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    linux网卡配置文件

    网卡配置文件     网卡目录[root@localhost opt]# ls /etc/sysconfig/network-scripts/网卡文件名字,和我们ifconfig看到的一样
    的头像 发表于 12-10 10:09 232次阅读

    springboot的项目如何既要用jar包启动,同时还可以为不同的机房设置不同的配置文件

    作者:京东科技 李意文 1、首先先把配置文件从jar中抽离 示例代码:   org.apache.maven.plugins maven-jar-plugin 3.2.0
    的头像 发表于 10-19 16:48 524次阅读
    springboot的项目如何既要用jar包启动,同时还可以为不同的机房设置不同的<b class='flag-5'>配置文件</b>

    HID over GATT配置文件(HOGP)低功耗蓝牙

    电子发烧友网站提供《HID over GATT配置文件(HOGP)低功耗蓝牙.pdf》资料免费下载
    发表于 09-26 11:01 1次下载
    HID over GATT<b class='flag-5'>配置文件</b>(HOGP)低功耗蓝牙

    确定LDO的任务配置文件兼容性

    电子发烧友网站提供《确定LDO的任务配置文件兼容性.pdf》资料免费下载
    发表于 09-24 10:44 0次下载
    确定LDO的任务<b class='flag-5'>配置文件</b>兼容性

    freertos最多支持多少个任务

    以下几个因素: 系统资源 :FreeRTOS能够支持的任务数量受到系统硬件资源的限制,特别是处理器的RAM大小和性能。RAM用于存储任务的控制块(TCB)和任务堆栈,因此RAM越大,理论上可以支持的任务数量就越多。 配置选项 :Free
    的头像 发表于 09-02 14:21 947次阅读

    InModbus2配置文件的注意事项

    大家好,由于最近经常有人问我InModbus2的配置文件如何编辑来达到想要的结果,所以发布一些关于InModbus2的配置文件注意事项,后期我还会发布一些示例来供大家参考让大家都掌握一些简单
    发表于 07-26 07:21

    如何完成编辑配置文件来采集数据

    今天通过给大家做一个路由器采集PLC地址为00001数据类型为bit的寄存器数值的配置文件来介绍一下如何完成编辑配置文件来采集数据。controllers:- controller:id
    发表于 07-26 06:50

    如何远程修改配置box文件

    选择售货机~工控机~设备列表,选择要修改的设备,点远程控制 远程控制窗口点击配置获取,配置获取执行成功会有“点击下载”提示 下载的配置文件修改,保存。 远程控制窗口点击配置下发,选择修
    发表于 07-25 07:43

    鸿蒙开发Ability Kit程序框架服务:FA模型应用配置文件

    应用配置文件中包含应用配置信息、应用组件信息、权限信息、开发者自定义信息等,这些信息在编译构建、分发和运行解决分别提供给编译工具、应用市场和操作系统使用。
    的头像 发表于 06-24 14:49 367次阅读
    鸿蒙开发Ability Kit程序框架服务:FA模型应用<b class='flag-5'>配置文件</b>

    鸿蒙开发:【Stage模型应用配置文件

    应用配置文件中包含应用配置信息、应用组件信息、权限信息、开发者自定义信息等,这些信息在编译构建、分发和运行解决分别提供给编译工具、应用市场和操作系统使用。
    的头像 发表于 06-15 09:15 1693次阅读
    鸿蒙开发:【Stage模型应用<b class='flag-5'>配置文件</b>】

    ubuntu固定ip怎么配置

    在Ubuntu系统中配置固定IP地址通常涉及编辑网络配置文件。以下是配置固定IP地址的步骤: 1、打开终端:可以通过快捷键Ctrl + Alt + T打开终端。 2、确定网络接口名称:使用ip
    的头像 发表于 06-03 17:26 3780次阅读

    CYW4373是否支持SPP和GATT配置文件

    CYW4373 是否支持 SPP 和 GATT 配置文件
    发表于 05-31 06:13

    鸿蒙OpenHarmony:【配置代理】

    新建代理配置文件
    的头像 发表于 04-29 22:17 824次阅读
    鸿蒙OpenHarmony:【<b class='flag-5'>配置</b>代理】

    支持CiA402驱动器配置文件的示例程序用于通过EtherCAT®通信进行电机控制

    电子发烧友网站提供《支持CiA402驱动器配置文件的示例程序用于通过EtherCAT®通信进行电机控制.pdf》资料免费下载
    发表于 02-21 14:21 2次下载
    支持CiA402驱动器<b class='flag-5'>配置文件</b>的示例程序用于通过EtherCAT®通信进行电机控制

    Linux系统中的配置文件

    系统文件,用于配置主机名与 IP 地址的映射关系。当系统需要解析主机名时,会首先查找 /etc/hosts 文件,如果在该文件中找到了相应的映射关系,则直接使用对应的 IP 地址进行通
    发表于 02-19 17:36 1278次阅读