关注+星标公众,不错过精彩内容

作者 | strongerHuang

微信公众号 | strongerHuang

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

通用配置

基础配置是需要我们定义的一些配置,也是比较重要的配置。

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);

提示:结束符 '\0'也包含在内。

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

------------ END ------------

●专栏《嵌入式工具

●专栏《嵌入式开发》

●专栏《Keil教程》

●嵌入式专栏精选教程

关注公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

点击“阅读原文”查看更多分享。

FreeRTOS配置文件有哪些基础配置相关推荐

  1. Nginx配置文件编写(基础配置)

    目录: 一.从一个简单的Nginx配置文件入手 如何使用自定义的配置文件 Nginx配置文件的结构 二.Nginx服务的基本配置 用于调试进程和定位问题的配置项 正常运行的配置项 优化性能的配置项 事 ...

  2. windows下nvim基础配置(编写和预览markdown)

    第一步 安装nvim,下载地址:http://neovim.io/. 第二步 配置plug-vim,下载plug.vim文件(https://github.com/junegunn/vim-plug) ...

  3. 【SpringBoot零基础案例09】【IEDA 2021.1】SpringBoot将核心配置文件中的自定义配置映射到一个对象

    使用@Value注解获取核心配置文件中的值时只能是一个一个的获取,如果在配置文件中有多个对象需要用到名称一样的配置,如name.age等属性,则需要区分是这个属性是哪个对象的.因此可以将这些配置映射到 ...

  4. 【Raspberry pi】系统安装及基础配置

    1.系统安装 见官网:http://www.raspberrypi.org/quick-start-guide 2.基础配置 转载自http://www.eeboard.com/bbs/thread- ...

  5. HAProxy详解(二):HAProxy基础配置与应用实例

    一.HAProxy基础配置与应用实例: 1.快速安装HAProxy集群软件: HAProxy的官网: https://www.haproxy.org/#down下载HAProxy的源码包. 安装: [ ...

  6. FTP-工作原理及Vsftpd基础配置

    废话不多说,先上图 说明:上图介绍了FTP的工作原理及数据连接下的两种工作模式对比 常见Server和Client Server:wu-ftpd,proftpd,pureftp,vsftpd(今天的主 ...

  7. SpringMVC基础配置及使用

    SpringMVC基础配置及使用 SpringMVC: 1.SpringMVC和Spring的关系:     软件开发的三层架构: web层[表示层.表现层]---->Service层----& ...

  8. Django 3.2.5博客开发教程:基础配置

    创建项目之后,我们需要对项目进行最基础的配置.这些配置是我们做项目的时候必须要配置的,所以我们先提前配置好. 我们打开myblog目录下的settings.py文件. 一.设置域名访问权限 myblo ...

  9. SpringMVC基础配置与简单的SpringMVC的程序

    SpringMVC SpringMVC技术架构图 基础配置(代码中有详细的基础配置使用的注解和标签的解释) 搭建maven项目 POM <?xml version="1.0" ...

最新文章

  1. linux inotify-tools 监控文件变化
  2. 使用NetBeans6开发OSGi应用(3)——整合Knopflerfish![88250原创]
  3. 大型网站架构模式之一
  4. Oracle中的数据类型和数据类型之间的转换
  5. 如何将SmartDraw中的图形导出LATEX可用的EPS格式?
  6. HDU4273(求三维凸包重心到表面的最短距离)
  7. Codewar-008: Playing with passphrases 玩玩加密口令
  8. 免费发布一个简单而有趣的计算工具
  9. IPhone IPad 利用cocos2d开发游戏问题
  10. 漫谈 Clustering (追忆篇): Regularized GMM
  11. KDD18 DIN Deep Interest Network for Click-Through Rate Prediction
  12. 用C语言递归实现火车调度算法详解
  13. eNSP华为路由器与交换机连接
  14. 互联网寒冬,程序员如何逆流而上?
  15. 今晚折腾了好久,win7极限精简版239M在虚拟机未成功?
  16. Unity 三消游戏学习
  17. 最常见6大防采集套路及解决方法,建议收藏!
  18. 爬虫-豆瓣书籍排行榜及用户信息-2021.7.23-使用Scrapy框架-用MongoDB存储数据
  19. 企业上云是工业互联网的前提,中国企业上云潜力巨大
  20. proteus电路仿真软件使用方法

热门文章

  1. xp桌面显示计算机,xp系统电脑开机后不显示桌面
  2. 迈克菲杀毒软件创始人(John McAfee)被发现在监狱死亡
  3. c# 打开的窗口显示在最前面_安装CATIA V5 6R2017 Win64时“许可证管理工具”窗口不弹出解决方案...
  4. 中职生计算机应用基础随堂练,计算机应用基础随堂练习.doc
  5. 树莓派 Raspbian Buster Lite版系统键盘布局修改问题
  6. 成为最大的独立开源公司,对SUSE意味着什么?
  7. matlab与金融的联系,Matlab 与金融实验
  8. 关于在vue2.6+ts技术栈下高德地图API的使用方法
  9. 怎样做出漂亮的excel数据分析表格
  10. 东莞市政府补贴1.5亿,推动免费WiFi建设!