FreeRTOS学习-配置项
转载自https://blog.csdn.net/weixin_43866583/article/details/125562063?spm=1001.2014.3001.5502
FreeRTOS的大部分配置项都在文件 FreeRTOSConfig.h 和 FreeRTOS.h 中,这两个文件中有很多的宏定义,用于系统的配置和裁剪,是很重要的文件
想要更加详细的了解相关的宏的作用和使用方法,可以参考freeRTOS官网给出的有关说明,链接如下:
https://www.freertos.org/a00110.html#configUSE_PREEMPTION
系统调度模式的选择
1 |
|
这个宏就是用于配置系统的调度模式的,调度模式选择如下:
0 - 合作式调度,任务之间根据时间片轮流的进行执行;
1 - 抢占式调度,即优先级高的任务可以抢占低优先级任务的运行权,优先执行;
系统要求实时响应的话,该宏配置为 1 即可。
tickless 低功耗模式
1 |
|
0 - 禁能 tickless 低功耗模式
1 - 使能 tickless 低功耗模式
系统主频的设置
1 |
|
这个宏用于配置CPU的主频,单位是Hz。这个数值要根据所用的cpu的实际时钟大小进行设置。比如:
STM32F103的主频最高位72MHz,STM32F407的主频为168MHz,这个不要填错。
系统心跳的速率
1 |
|
心跳速率也称为系统滴答,即系统每秒钟滴答的次数。比如上面配置为1000,就是把1秒分成了1000份,每一份为 1 毫秒。
系统最大的优先级
1 |
|
这个宏用于配置系统最大可用的优先级。比如上面设置为 5,所以系统可以用的优先级为 0 - 4,5是不能用的。如果优先级超过这个设定,系统会忽略不处理。
注意:FreeRTOS中优先级数值越大,优先级越高。而UCOS则相反。
最小堆栈的设置
1 |
|
在系统中,这个宏用于配置一些任务的堆栈空间的大小,一般用于空闲、定时等一些系统任务中。
注意:这个配置的单位是字,而不是字节!在RAM中,一个字是4byte!!
系统总堆栈大小
1 |
|
这个宏用于设定系统的可用堆栈的总量大小(单位为字)。
使用时需要根据MCU的RAM和项目开发的功能情况定义这个值。不能定义太小,太小内存容易溢出;也不能定义太大,如果芯片RAM容量不够大,会导致变量定义失败,或分配其他堆栈空间时申请不到空间。
任务名称最大长度
1 |
|
这个宏用于定义任务名称允许的最大字符串长度。
注意:结束符“\0”也包括在内。
互斥信号量
1 |
|
互斥信号量是一种很重要的同步手段。一般用于资源共享的“加锁” 和任务优先级反转上。
它可以实现多任务间对共享资源的独占和保护。即在某个资源在某个时刻只允许一个任务使用,使用完之后才允许其他任务使用该共享资源。
比如:任务A是高优先级任务,B是低优先级任务;A、B任务都用同一个串口发送指令数据,(每次必须发送完整,不能被打断)。当任务B正在发送数据时,任务A要打断任务B,任务B就需要使用互斥信号占有该串口,等发送完数据之后,再释放该串口给任务A使用。
信号量计数功能
1 |
|
0 - 不使用信号量计数功能
1 - 使用信号量计数功能
使能任务间直接的消息传递
1 |
|
0 - 禁止任务间直接的消息传递
1 - 使能任务间直接的消息传递,包含信号量,事件标志组和消息邮箱。
版本兼容性选择
1 |
|
0 - 新旧版本不兼容
1 - 新旧版本之间可兼容,即新版本兼容老版本
获取任务运行信息
1 |
|
0 - 禁止获取任务运行状态参数
1 - 使能任务运行状态参数统计
开启软件定时器
1 |
|
通过将这个宏设置为1来使能软件定时器功能。
配置软件定时器任务的优先级
1 |
|
软件定时器的实现是基于系统心跳实现的,管理软件定时器本质也是由一个定时器任务进行的,所以也是需要设置定时器任务的优先级的。具体的优先级根据自己项目的实际情况设置吧!
软件定时器命令队列的长度
1 |
|
说白了,FreeRTOS的软件定时器其实是通过消息队列实现的。具体的数值根据你使用到多个软件定时器而定吧!
软件定时器任务的栈空间
1 |
|
软件定时器任务的堆栈空间的大小,和创建任务一样,也要给软件定时器任务分配堆栈空间。
断言设置
1 |
|
关键字 LINE 表示源代码行号,关键字__FILE__表示源代码文件名,函数 vAssertCalled 里面调用串口打印之类的功能,将出现错误的源文件和代码行号打印出来,比较方便!