配置FreeRTOS
- 格式:docx
- 大小:20.67 KB
- 文档页数:6
配置FreeRTOSFreeRTOS 是高度可配置的。
所有的可配置项都在FreeRTOSConfig.h 文件中。
每一个Demo 程序中都包含了一个配置好的FreeRTOSConfig.h 文件,可以以Demo程序中的FreeRTOSConfig.h 文件作为模板,在其基础上加以修改。
下面先给出一个典型的FreeRTOSConfig.h 文件,然后再逐项加以说明。
[cpp]view plaincopy1.#ifndef FREERTOS_CONFIG_H2.#define FREERTOS_CONFIG_H3.4./* Here is a good place to include header files that are required across5.your application. */6.#include "something.h"7.8.#define configUSE_PREEMPTION 19.#define configUSE_IDLE_HOOK 010.#define configUSE_TICK_HOOK 011.#define configCPU_CLOCK_HZ 5898240012.#define configTICK_RATE_HZ 25013.#define configMAX_PRIORITIES 514.#define configMINIMAL_STACK_SIZE 12815.#define configTOTAL_HEAP_SIZE 1024016.#define configMAX_TASK_NAME_LEN 1617.#define configUSE_TRACE_FACILITY 018.#define configUSE_16_BIT_TICKS 019.#define configIDLE_SHOULD_YIELD 120.#define configUSE_MUTEXES 021.#define configUSE_RECURSIVE_MUTEXES 022.#define configUSE_COUNTING_SEMAPHORES 023.#define configUSE_ALTERNATIVE_API 024.#define configCHECK_FOR_STACK_OVERFLOW 025.#define configQUEUE_REGISTRY_SIZE 1026.#define configGENERATE_RUN_TIME_STATS 027.28.#define configUSE_CO_ROUTINES 029.#define configMAX_CO_ROUTINE_PRIORITIES 130.31.#define configUSE_TIMERS 132.#define configTIMER_TASK_PRIORITY 333.#define configTIMER_QUEUE_LENGTH 1034.#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE35.36.#define configKERNEL_INTERRUPT_PRIORITY [dependent of processor]37.#define configMAX_SYSCALL_INTERRUPT_PRIORITY [dependent onprocessor and application]38.39.#define configASSERT( ( x ) ) if( ( x ) == 0 ) vCallAssert( __FILE__,__LINE__ )40.41.#define INCLUDE_vTaskPrioritySet 142.#define INCLUDE_uxTaskPriorityGet 143.#define INCLUDE_vTaskDelete 144.#define INCLUDE_vTaskSuspend 145.#define INCLUDE_xResumeFromISR 146.#define INCLUDE_vTaskDelayUntil 147.#define INCLUDE_vTaskDelay 148.#define INCLUDE_xTaskGetSchedulerState 149.#define INCLUDE_xTaskGetCurrentTaskHandle 150.#define INCLUDE_uxTaskGetStackHighWaterMark 051.#define INCLUDE_xTaskGetIdleTaskHandle 052.#define INCLUDE_xTimerGetTimerDaemonTaskHandle 053.#define INCLUDE_pcTaskGetTaskName 054.55.#endif /* FREERTOS_CONFIG_H */可配置的参数configUSE_PREEMPTION设为1则采用抢占式调度器, 设为0则采用协作式调度器。
configUSE_IDLE_HOOK设为1则使能idle hook,设为0则禁止idle hook。
configUSE_TICK_HOOK设为1则使能tick hook,设为0则禁止tick hook。
configCPU_CLOCK_HZ设置为MCU 内核的工作频率,以Hz为单位。
配置FreeRTOS的时钟Tick时会用到。
对不同的移植代码也可能不使用这个参数。
如果确定移植代码中不用它就可以注释掉这行。
configTICK_RATE_HZFreeRTOS的时钟Tick的频率,也就是FreeRTOS用到的定时中断的产生频率。
这个频率越高则定时的精度越高,但是由此带来的开销也越大。
FreeRTOS 自带的Demo 程序中将TickRate 设为了1000Hz只是用来测试内核的性能的。
实际的应用程序应该根据需要改为较小的数值。
当多个任务共用一个优先级时,内核调度器回来每次时钟中断到来后轮转切换任务(round robin),因此,更高的Tick Rate 会导致任务的时间片“time slice”变短。
configMAX_PRIORITIES程序中可以使用的最大优先级。
FreeRTOS 会为每个优先级建立一个链表,因此没多一个优先级都会增加些RAM 的开销。
所以,要根据程序中需要多少种不同的优先级来设置这个参数。
configMINIMAL_STACK_SIZE任务堆栈的最小大小,FreeRTOS根据这个参数来给idle task 分配堆栈空间。
这个值如果设置的比实际需要的空间小,会导致程序挂掉。
因此,最好不要减小Demo 程序中给出的大小。
configTOTAL_HEAP_SIZE设置堆空间(Heap)的大小。
只有当程序中采用FreeRTOS 提供的内存分配算法时才会用到。
configMAX_TASK_NAME_LEN任务名称最大的长度,这个长度是以字节为单位的,并且包括最后的NULL 结束字节。
configUSE_TRACE_FACILITY如果程序中需要用到TRACE功能,则需将这个宏设为1。
否则设为0。
开启TRACE功能后,RAM占用量会增大许多,因此在设为1之前请三思。
configUSE_16_BIT_TICKS将configUSE_16_BIT_TICKS设为1后portTickType 将被定义为无符号的16位整形类型,configUSE_16_BIT_TICKS 设为0 后portTickType 则被定义为无符号的32位整型。
configIDLE_SHOULD_YIELD这个参数控制那些优先级与idle 任务相同的任务的行为,并且只有当内核被配置为抢占式任务调度时才有实际作用。
内核对具有同样优先级的任务会采用时间片轮转调度算法。
当任务的优先级高于idle任务时,各个任务分到的时间片是同样大小的。
但当任务的优先级与idle任务相同时情况就有些不同了。
当configIDLE_SHOULD_YIELD 被配置为1时,当任何优先级与idle 任务相同的任务处于就绪态时,idle任务会立刻要求调度器进行任务切换。
这会使idle任务占用最少的CPU时间,但同时会使得优先级与idle 任务相同的任务获得的时间片不是同样大小的。
因为idle任务会占用某个任务的部分时间片。
configUSE_MUTEXES设为1 则程序中会包含mutex 相关的代码,设为0 则忽略相关的代码。
configUSE_RECURSIVE_MUTEXES设为1 则程序中会包含recursive mutex 相关的代码,设为0 则忽略相关的代码。
configUSE_COUNTING_SEMAPHORES设为1 则程序中会包含semaphore 相关的代码,设为0 则忽略相关的代码。
configUSE_ALTERNATIVE_API设为1 则程序中会包含一些关于队列操作的额外API函数,设为0 则忽略相关的代码。
这些额外提供的API运行速度更快,但是临界区(关中断)的长度也更长。
有利也有弊,是否要采用需要用户自己考虑了。
configCHECK_FOR_STACK_OVERFLOW控制是否检测堆栈溢出。
configQUEUE_REGISTRY_SIZE队列注册表有两个作用,但是这两个作用都依赖于调试器的支持:1. 给队列一个名字,方便调试时辨认是哪个队列。
2. 包含调试器需要的特定信息用来定位队列和信号量。
如果你的调试器没有上述功能,哪个这个注册表就毫无用处,还占用的宝贵的RAM空间。
configGENERATE_RUN_TIME_STATS设置是否产生运行时的统计信息,这些信息只对调试有用,会保存在RAM 中,占用RAM空间。
因此,最终程序建议配置成不产生运行时统计信息。
configUSE_CO_ROUTINES设置为1则包含co-routines 功能,如果包含了co-routines功能,则编译时需包含croutine.c 文件configMAX_CO_ROUTINE_PRIORITIESco-routines 可以使用的优先级的数量。
configUSE_TIMERS设置为1则包含软件定时器功能。
configTIMER_TASK_PRIORITY设置软件定时器任务的优先级。
configTIMER_QUEUE_LENGTH设置软件定时器任务中用到的命令队列的长度。
configTIMER_TASK_STACK_DEPTH设置软件定时器任务需要的任务堆栈大小。