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

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

3天内不再提示

FreeRTOS_004_FreeRTOSConfig.h配置文件(一) 升级版

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-14 14:06 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

写在前面

上一篇我文章提供大家可直接运行的代码,如果测试过的朋友应该知道,想要FreeRTOS运行起来其实很简单,不用修改很多代码和配置信息,就可以将FreeRTOS添加到自己的工程中并成功跑起来。

从本文开始讲述FreeRTOS中的代码,为了照顾大部分朋友,还是以简单,基础为原则。

FreeRTOS中“FreeRTOSConfig.h”配置的内容随着版本(功能)的增加而增加,也就是说随着系统功能的增加,对应需要的配置信息也响应增加了。但是系统为了兼容之前的代码,系统自身做了兼容处理。

比如:configUSE_QUEUE_SETS是属于“FreeRTOSConfig.h”中定义的选项,如果用户没有定义,则在“FreeRTOS.h”中有类似如下定义。

#ifndefconfigUSE_QUEUE_SETS

#defineconfigUSE_QUEUE_SETS0

#endif

开始设计FreeRTOS系统时,工程师们肯定会想到,要尽量减少开发者的开发难度。我们初学移植FreeRTOS时,“FreeRTOSConfig.h”中的大部分配置都选择默认即可。只有后期熟悉了,开发需要使用较多功能的时候,里面各项的配置就必须要熟透。

对英文不反感的朋友建议参考官网的内容,毕竟官网的资料才是最权威的。

官网地址:

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

从官网提供的资料,可以看得出“FreeRTOSConfig.h”将配置信息划分为10大类,但是很多配置信息我们都可以选择不用(或者不定义)。

微信公众号中技术文章篇幅不易过长,本文针对初学者,先讲述通用的配置。

通用配置

这一章也叫基本配置,反正就是需要我们定义的一些配置,也是比较重要的配置。

提示:带(*)的为相对理解一点,或者较重要。

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

精华部分

之前推出的电子书版本反应的效果不错。因此,坚持为大家整理FreeRTOS系列教程的PDF版本电子书。

【提示:微信公众号不支持外链接】

FreeRTOS系列教程PDF电子书下载地址:

http://pan.baidu.com/s/1nuHFF5n

网上很多教程都没有配套的Demo例程,希望我这结合Demo例程讲述的一系列教程,能让大家更加容易学会。

FreeRTOS_STM32F0_Demo下载地址:

http://pan.baidu.com/s/1qYbmfy0

FreeRTOS_STM32F1_Demo下载地址:

http://pan.baidu.com/s/1jHDHRPc

FreeRTOS_STM32F2_Demo下载地址:

http://pan.baidu.com/s/1mi3eIdq

FreeRTOS_STM32F3_Demo下载地址:

http://pan.baidu.com/s/1kUZu5G7

FreeRTOS_STM32F4_Demo下载地址:

http://pan.baidu.com/s/1bplLZ7x

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

    关注

    14

    文章

    497

    浏览量

    66327
  • 程序互斥
    +关注

    关注

    0

    文章

    3

    浏览量

    6232
  • config
    +关注

    关注

    0

    文章

    15

    浏览量

    4934
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    求助各位大佬,关于如何读写编码格式为UTF-16LE的配置文件

    如题,小白求助各位大佬,要怎么实现对编码为UTF-16LE的配置文件的读写。 使用读配置文件的vi读不出内容。 使用读文本的方式写入异常,文件的编码变成UTF-8且内容也不对。
    发表于 09-14 12:54

    CYW920820M2EVB-01开发套件可以与蓝牙的免提配置文件起使用吗?

    我有英飞凌 CYW920820M2EVB-01 开发套件,我想将它与蓝牙的免提配置文件起使用。 是否可以。 该套件是否支持该配置文件? 我无法在任何地方找到该套件支持的配置文件。 如
    发表于 06-30 06:15

    如何才能知道英飞凌Bluetooth®产品支持哪种Bluetooth®配置文件和版本?

    如何才能知道英飞凌Bluetooth®产品支持哪种Bluetooth®配置文件和版本? A2DP、AVRCP、HSP、HFP 等 是否有个网页或文档解释每个设备支持哪些配置文件和版本? 目前我想了解以下设备特别支持的
    发表于 06-27 06:04

    【RA4L1-SENSOR】4、移植FreeRTOS-CLI

    方式为动态分配。 在配置中设置自定义的FreeRTOSConfig.h文件路径,可以在工程中使用自定义的FreeRTOSConfig.h文件
    发表于 06-26 22:30

    配置文件的差异介绍

    配置文件的差异 FA模型应用在config.json文件中描述应用的基本信息,个应用工程中可以创建多个Module,每个Module中都有份config.json
    发表于 06-05 06:50

    Profibus DP主站转Modbus TCP网关配置文件制作

    Profibus DP主站转Modbus TCP网关配置文件制作
    的头像 发表于 04-02 13:06 516次阅读
    Profibus DP主站转Modbus TCP网关<b class='flag-5'>配置文件</b>制作

    嵌入式开发避坑指南|FreeRTOS的5个\"反直觉\"小技巧

    512B,但因接收NMEA语句时缓冲区溢出,最终导致系统崩溃。修复后堆栈扩容至1KB 技巧5:配置文件藏着\"隐藏技能\" 冷知识: 修改configTICK_RATE_HZ
    发表于 03-20 13:57

    是否有用于OpenVINO™工具套件的配置文件工具呢?

    是否有用于OpenVINO™工具套件的配置文件工具?
    发表于 03-06 07:29

    Web Bluetooth SPP(串行端口配置文件)示例

    电缆替代(Cable Replacement)通常指的是通过无线技术,如低功耗蓝牙(Bluetooth LE)替代传统的有线连接,例如串行端口配置文件(Serial Port Profile,简称SPP)。
    的头像 发表于 02-28 09:40 1068次阅读

    DLPC3478怎么去做ini配置文件和firmware呢 ?

    你好我们现在是用其他厂商的芯片做的开发板加上dlpc3478 2005dmd3010,我们不是官网那个evm,我们要自己开发我们怎么去做ini配置文件 和firmware呢 ?之后我们是用特殊
    发表于 02-24 06:35

    亚马逊升级版Alexa推迟发布

    据悉,亚马逊计划在2月26日举办的场活动中,首次展示其基于人工智能技术的全新升级版Alexa。然而,令人意外的是,这款备受期待的升级版Alexa预计至少要到3月31日或更晚才会正式与消费者见面
    的头像 发表于 02-17 14:02 947次阅读

    如何导出交换机的配置文件

    在网络管理中,导出交换机的配置文件项关键任务,它有助于备份、审计、迁移或恢复网络配置。本文将详细介绍如何导出交换机配置文件,涵盖多种方法,适用于不同场景和需求。文章内容将围绕几种常
    的头像 发表于 02-02 17:20 6407次阅读

    MSC1210是否有替代料或者升级版本?

    MSC1210是否有替代料或者升级版
    发表于 01-15 07:15

    迅为RK3568开发板篇OpenHarmony配置HDF驱动控制LED-配置创建私有配置文件

    私有配置文件,用来填写些驱动的默认配置信息。HDF 框架在加载驱动时,会获取相应的配置信息并将其保存在 HdfDeviceObject 的 property 中。这些
    发表于 01-10 11:13

    linux网卡配置文件

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