FreeRTOSConfig.h配置文件

FreeRTOS 使用 FreeRTOSConfig.h 文件进行配置和裁剪。FreeRTOSConfig.h 文件中有几十个配置项,这使得用户能够很好地配置和裁剪 FreeRTOS。FreeRTOSConfig.h 文件中的配置项可分为三大类:“config”配置项、“INCLUDE”配置项和其他配置项

(1)“INCLUDE”配置项

FreeRTOS 使用“INCLUDE”配置项对部分 API 函数进行条件编译,当“INCLUDE”配置
项被定义为 1 时,其对应的 API 函数则会加入编译。对于用不到的 API 函数,用户则可以将其
对应的“INCLUDE”配置项设置为 0,那么这个 API 函数就不会加入编译,以减少不必要的系
统开销。

INCLUDE_vTaskPrioritySet  设置任务优先级
INCLUDE_uxTaskPriorityGet  获取任务优先级
INCLUDE_vTaskDelete  删除任务
INCLUDE_vTaskSuspend  挂起任务
INCLUDE_xResumeFromISR  恢复在中断中挂起的任务
INCLUDE_vTaskDelayUntil  任务绝对延时
INCLUDE_vTaskDelay  任务延时
INCLUDE_xTaskGetSchedulerState  获取任务调度器状态
INCLUDE_xTaskGetCurrentTaskHandle  获取当前任务的任务句柄
INCLUDE_uxTaskGetStackHighWaterMark  获取任务堆栈历史剩余最小值
INCLUDE_xTaskGetIdleTaskHandle  获取空闲任务的任务句柄
INCLUDE_eTaskGetState  获取任务状态
INCLUDE_xEventGroupSetBitFromISR  在中断中设置事件标志位
INCLUDE_xTimerPendFunctionCall  将函数的执行挂到定时器服务任务
INCLUDE_xTaskAbortDelay  中断任务延时
INCLUDE_xTaskGetHandle  通过任务名获取任务句柄
INCLUDE_xTaskResumeFromISR  恢复在中断中挂起的任务

(2)“config”配置项

“config"开始的宏,用于完成FreeRTOS的配置和裁剪

1. configUSE_PREEMPTION
        此宏用于设置系统的调度方式。当宏 configUSE_PREEMPTION 设置为 1 时,系统使用抢
占式调度;当宏 configUSE_PREEMPTION 设置为 0 时,系统使用协程式调度。抢占式调度和
协程式调度的区别在于,协程式调度是正在运行的任务主动释放 CPU 后才能切换到下一个任
务,任务切换的时机完全取决于正在运行的任务。
协程式的优点在于可以节省开销,但是功能
比较有限,现在的 MCU 性能都比较强大,建议使用抢占式调度。

2. configUSE_PORT_OPTIMISED_TASK_SELECTION
        FreeRTOS 支持两种方法来选择下一个要执行的任务,分别为通用方法和特殊方法。
当宏 configUSE_PORT_OPTIMISED_TASK_SELECTION 设置为 0 时,使用通用方法。通
用方法是完全使用 C 实现的软件算法,因此支持所用硬件,并且不限制任务优先级的最大值,
但效率相较于特殊方法低。当宏 configUSE_PORT_OPTIMISED_TASK_SELECTION 设置为 1 时,使用特殊方法。特殊方法的效率相较于通用方法高,但是特殊方法依赖于一个或多个特定架构的汇编指令(一般是类似计算前导零[CLZ]的指令),因此特殊方法并不支持所有硬件,并且对任务优先级的最大值一般也有限制,通常为 32。

3. configUSE_TICKLESS_IDLE
        当宏 configUSE_TICKLESS_IDLE 设置为 1 时,使能 tickless 低功耗模式;设置为 0 时,
tick 中断则会移植运行。tickless 低功耗模式并不适用于所有硬件。

4. configCPU_CLOCK_HZ
        此宏应设置为 CPU 的内核时钟频率,单位为 Hz。

5. configSYSTICK_CLOCK_HZ
        此宏应设置为 SysTick 的时钟频率,当 SysTick 的时钟源频率与内核时钟频率不同时才可
以定义,单位为 Hz。

6. configTICK_RATE_HZ
        此宏用于设置 FreeRTOS 系统节拍的中断频率,单位为 Hz。

7. configMAX_PRIORITIES
        此 宏 用 于 定 义 系 统 支 持 的 最 大 任 务 优 先 级 数 量 , 最 大 任 务 优 先 级 数 值 为
configMAX_PRIORITIES-1。

8. configMINIMAL_STACK_SIZE
        此宏用于设置空闲任务的栈空间大小,单位为 word。

9. configMAX_TASK_NAME_LEN
        此宏用于设置任务名的最大字符数。

10. configUSE_16_BIT_TICKS
        此宏用于定义系统节拍计数器的数据类型,当宏 configUSE_16_BIT_TICKS 设置为 1 时,
系统节拍计数器的数据类型为 16 位无符号整形;当宏 configUSE_16_BIT_TICKS 设置为 0 时,
系统节拍计数器的数据类型为 32 为无符号整型。

11. configIDLE_SHOULD_YIELD
        当宏 configIDLE_SHOULD_YIELD 设置为 1 时,在抢占调度下,同等优先级的任务可抢占
空闲任务,并延用空闲任务剩余的时间片。

12. configUSE_TASK_NOTIFICATIONS
        当宏 configUSE_TASK_NOTIFICATIONS 设置为 1 时,开启任务通知功能。当开启任务通
知功能后,每个任务将多占用 8 字节的内存空间。

13. configTASK_NOTIFICATION_ARRAY_ENTRIES
        此宏用于定义任务通知数组的大小。

14. configUSE_MUTEXES
        此宏用于使能互斥信号量,当宏 configUSE_MUTEXS 设置为 1 时,使能互斥信号量;当宏
configUSE_MUTEXS 设置为 0 时,则不使能互斥信号量。

15. configUSE_RECURSIVE_MUTEXES
        此宏用于使能递归互斥信号量,当宏 configUSE_RECURSIVE_MUTEXES 设置为 1 时,使
能递归互斥信号量;当宏 configUSE_RECURSIVE_MUTEXES 设置为 0 时,则不使能递归互斥
信号量。

16. configUSE_COUNTING_SEMAPHORES
        此宏用于使能计数型信号量,当宏 configUSE_COUNTI

17. configUSE_ALTERNATIVE_API
        此宏在 FreeRTOS V9.0.0 之后已弃用。

18. configQUEUE_REGISTRY_SIZE
        此宏用于定义可以注册的队列和信号量的最大数量。此宏定义仅用于调试使用。

19. configUSE_QUEUE_SETS
        此宏用于使能队列集,当宏 configUSE_QUEUE_SETS 设置为 1 时,使能队列集;当宏
configUSE_QUEUE_SETS 设置为 0 时,则不使能队列集。

20. configUSE_TIME_SLICING
        此宏用于使能时间片调度,当宏 configUSE_TIMER_SLICING 设置为 1 且使用抢占式调度
时,使能时间片调度;当宏 configUSE_TIMER_SLICING 设置为 0 时,则不使能时间片调度。

21. configUSE_NEWLIB_REENTRANT
        此 宏 用 于 为 每 个 任 务 分 配 一 个 NewLib 重 入 结 构 体 , 当 宏
configUSE_NEWLIB_REENTRANT 设置为 1 时,FreeRTOS 将为每个创建的任务的任务控制块中分配一个 NewLib 重入结构体。

22. configENABLE_BACKWARD_COMPATIBILITY
        此宏用于兼容 FreeRTOS 老版本的 API 函数。

23. configNUM_THREAD_LOCAL_STORAGE_POINTERS
        此宏用于在任务控制块中分配一个线程本地存储指着数组,当此宏被定义为大于 0 时,
configNUM_THREAD_LOCAL_STORAGE_POINTERS 为线程本地存储指针数组的元素个数;
当宏 configNUM_THREAD_LOCAL_STORAGE_POINTERS 为 0 时,则禁用线程本地存储指针
数组。

24. configSTACK_DEPTH_TYPE
        此宏用于定义任务堆栈深度的数据类型,默认为 uint16_t。

25. configMESSAGE_BUFFER_LENGTH_TYPE
        此宏用于定义消息缓冲区中消息长度的数据类型,默认为 size_t。

(3)中断相关的 FreeRTOS 配置项

FreeRTOSConfig.h 文件中有 6 个与中断相关的 FreeRTOS 配置项

1. configPRIO_BITS
        此宏是用于辅助配置的宏,主要用于辅助配置宏 configKERNEL_INTERRUPT_PRIORITY
和宏 configMAX_SYSCALL_INTERRUPT_PRIORITY 的,此宏应定义为 MCU 的 8 位优先级配
置寄存器实际使用的位数
,因为 STM32 只使用到了中断优先级配置寄存器的高 4 位,因此,此
宏应配置为 4。
2. configLIBRARY_LOWEST_INTERRUPT_PRIORITY
        此宏是用于辅助配置宏 configKERNEL_INTERRUPT_PRIORITY 的,此宏应设置为 MCU
的最低优先等级
,因为 STM32 只使用了中断优先级配置寄存器的高 4 位,因此 MCU 的最低优
先等级就是 2^4-1=15
,因此,此宏应配置为 15。
3. configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY
        此宏是用于辅助配置宏 configMAX_SYSCALL_INTERRUPT_PRIORITY 的,此宏适用于配
置 FreeRTOS 可管理的最高优先级的中断
,此功能就是操作 BASEPRI 寄存器来实现的。此宏的
值可以根据用户的实际使用场景来决定,本教程的配套例程源码全部将此宏配置为 5,即中断
优先级高于 5 的中断不受 FreeRTOS 影响,如下图所示:

4. configKERNEL_INTERRUPT_PRIORITY
        此宏应配置为 MCU 的最低优先级在中断优先级配置寄存器中的值,在 FreeRTOS 的源码
中,使用此宏将 SysTick 和 PenSV 的中断优先级设置为最低优先级。因为 STM32 只使用了中
断优先级配置寄存器的高 4 位,此宏应配置为最低中断优先级在中断优先级配置寄存器高 4 位的表示,即(configLIBRARY_LOWEST_INTERRUPT_PRIORITY<<(8-configPRIO_BITS))。0
5. configMAX_SYSCALL_INTERRUPT_PRIORITY
        此宏用于配置 FreeRTOS 可管理的最高优先级的中断,在 FreeRTOS 的源码中,使用此宏来
打开和关闭中断。
因为 STM32 只使用了中断优先级配置寄存器的高 4 位,因此,此宏应配置为
(configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY<<(8-configPRIO_BITS))。
6. configMAX_API_CALL_INTERRUPT_PRIORITY
        此宏为宏 configMAX_SYSCALL_INTERRUPT_PRIORITY 的新名称,只被用在 FreeRTOS
官方一些新的移植当中,此宏于宏 configMAX_SYSCALL_INTERRUPT_PRIORITY 是等价的。

(4)其他配置项

        1. ureconfigMAX_SECURE_CONTEXTS
        此宏为 ARMv8-M 安全侧端口的相关配置项,本文暂不涉及 ARMv8-M 安全侧端口的相关
内容,感兴趣的读者可自行查阅相关资料。

        2. PendSVHandler  和 vPortSVCHandler
        这两个宏为 PendSV 和 SVC 的中断服务函数,主要用于 FreeRTOS 操作系统的任务切换,
有关 FreeRTOS 操作系统中任务切换的相关内容

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FreeRTOSConfig.h文件是FreeRTOS配置文件,用于配置FreeRTOS操作系统的功能和行为。用户可以根据自己的需求,在该文件中使用宏定义来定义所需的功能和配置选项。这些宏值几乎全部来自于FreeRTOS.h系统级头文件,用户可以根据需要在FreeRTOS.h中查找对应的宏值,并在FreeRTOSConfig.h中进行定义。FreeRTOS.h会检查特定功能的宏值是否在FreeRTOSConfig.h中定义,如果用户定义了指定的宏值,FreeRTOS将根据用户的定义来实现相应的功能。通过这种方式,用户可以根据自己的需求来配置FreeRTOS,而无需直接修改内核头文件FreeRTOS.h,实现了灵活的配置。 #### 引用[.reference_title] - *1* *3* [FreeRTOS 之三 全配置项(FreeRTOSConfig.h)详解、裁剪、使用示例](https://blog.csdn.net/ZCShouCSDN/article/details/54694511)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [FreeRTOS学习(二)FreeRTOSConfig.h配置文件](https://blog.csdn.net/qq_45231117/article/details/129364795)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值