FreeRTOS的配置文件是FreeRTOSConfig.h。有些宏定义可以不用定义,FreeRTOS会使用默认值,有些宏定义则必须配置好。
configUSE_PREEMPTION
设置调度方式。设置1时为抢占式调度,优先级高的任务优先执行;设置0时为合作式调度,通过时间片轮流执行。
configUSE_IDLE_HOOK
设置是否支持空闲钩子函数。设置1时需要实现钩子函数void vApplicationIdleHook( void ),否则会编译错误。
configUSE_TICK_HOOK
设置是否支持时钟滴答钩子函数。设置1时需要实现钩子函数void vApplicationTickHook( void ),否则会编译错误。
configCPU_CLOCK_HZ
CPU主频,单位Hz。
configTICK_RATE_HZ
系统滴答,即系统每秒钟滴答的次数
configMAX_PRIORITIES
系统最大优先级。FreeRTOS的优先级和RT Thread的优先级相反,数值越高优先级越高。为了保持一致性,在创建任务时将优先级做调整。
#define rtosCreateThread( \
handle, /*Thread Handle*/ \
name, /*Thread Name*/ \
entry, /*Thread Entry*/ \
parameter, /*Thread Entry Parameter*/ \
stack, /*the pointer of stack*/ \
stackSize, /*the size of stack*/ \
priority, /*Thread priority*/ \
tick /*The total tick of thread running*/ \
) \
{ \
xTaskCreate(entry, name, stackSize, parameter, \
RTOS_PRIORITY_MAX - (priority) - 1, \
&handle); \
}
configMINIMAL_STACK_SIZE
系统最小堆栈大小,单位是Word,ARM为4字节。这个配置是用于空闲、定时等一些系统任务。
configTOTAL_HEAP_SIZE
系统总的堆大小,单位是4字节。
configMAX_TASK_NAME_LEN
任务名字符串长度,包括结束符。
configUSE_TRACE_FACILITY
可视化追踪功能,用于调试,比如获取CPU的使用率。
configUSE_16_BIT_TICKS
设置时钟定时器计数位数,定义configUSE_16_BIT_TICKS为1时,位数为16位,反之为32位。一般情况下,8位或16位MCU设置为1,32位MCU设置为0。
configIDLE_SHOULD_YIELD
设置空闲任务是否放弃抢占。在执行与空闲任务相同优先级的任务过程中,空闲任务是否具有抢占的机会,设置1时,当其他同优先级任务就绪时,空闲任务让出CPU,设置0时,空闲任务是在时间片到了才让出CPU。
configUSE_MUTEXES
是否使用互斥锁。
configQUEUE_REGISTRY_SIZE
定义可以记录的队列和信号量的最大数目,一般用于调试。
configCHECK_FOR_STACK_OVERFLOW
设置堆栈是否检测溢出,设置为0表示不检查;设置为1,测试方法1,就是不断的检测任务堆栈指针是否指向有效空间,如果指向了无效空间的话就会调用钩子函数。 方法一的优点就是快!但是缺点就是不能检测所有的堆栈溢出;设置为2,测试方法2,在创建任务的时候会向任务堆栈填充一个已知的标记值0xA5,方法二会一直检测堆栈后面的几个 bytes(标记值)是否被改写,如果被改写的话就会调用堆栈溢出钩子函数,方法二比方法一要慢一些,但是对用户而言还是很快的!方法
二能检测到几乎所有的堆栈溢出, 但是也有一些情况检测不到,比如溢出值和标记值相同的时
候。
configUSE_RECURSIVE_MUTEXES
是否使用递归互斥信号量。
configUSE_MALLOC_FAILED_HOOK
是否开启动态内存申请失败的钩子函数:void vApplicationMallocFailedHook( void );
configUSE_APPLICATION_TASK_TAG
是否为任务分配标签值,设置为1则使用vTaskSetApplicationTaskTag函数,分配的标签只对应用程序有用,内核不使用。
configUSE_COUNTING_SEMAPHORES
是否使用计数器型信号量功能。
configGENERATE_RUN_TIME_STATS
是否使用运行时间统计功能。
configUSE_TIMERS
是否使用软件定时器
configTIMER_TASK_PRIORITY
设置定时器任务优先级
configTIMER_QUEUE_LENGTH
软件定时器命令队列长度
configTIMER_TASK_STACK_DEPTH
设置定时器堆栈大小,单位是Word,ARM对应4字节,可以查看StackType_t的大小。