STM2F407与FreeRTOS的FreeRTOSConfig.h详解<2>

上一篇,对config宏的基础配置和部分相关的配置,有些宏我们暂时没有用上,所以对这些宏定义的概念不太清楚,这章节是对余下部分解析。

config_*

FreeRTOS与钩子函数有关的配置选项

configUSE_IDLE_HOOK

为1的话,就是使能空闲任务回调函数,也就是如果系统调用空闲函数的话,就会回调钩子函数,我们自己去实现这个函数,函数声明如下:

1
void vApplicationIdleHook( void );

configUSE_TICK_HOOK

为1的话使能时间片钩子函数,但是需要我们自己去实现这个函数,函数声明如下:

1
void vApplicationTickHook( void );

FreeRTOS与运行时间和任务状态收集有关的配置选项

configGENERATE_RUN_TIME_STATS

为1 的话开启时间统计功能,如果定义这个宏的话,就必须还有定义另外两个宏,这个在后面的任务查询的时候我们有可能会配置,这两个宏分别是:

1
2
portCONFIGURE_TIMER_FOR_RUN_TIME_STATS
portALT_GET_RUN_TIME_COUNTER_VALUE

configUSE_TRACE_FACILITY

为1的话启动可视化跟踪调试,会增加一些结构体成员和API函数。

configUSE_STATS_FORMATTING_FUNCTIONS

Set configUSE_TRACE_FACILITY and configUSE_STATS_FORMATTING_FUNCTIONS to 1
to include the vTaskList() and vTaskGetRunTimeStats()

FreeRTOS与协程有关的配置选项(现在的MCU很强大,不需要节约资源,所以基本不配置协程)

configUSE_CO_ROUTINES

为1的话,工程需要编译协程,需要把协程文件包含进来,相应的API函数才会被编译。

configMAX_CO_ROUTINE_PRIORITIES

设置协程的最大优先级,设置完之后,协程使用的优先级范围0~configMAX_CO_ROUTINE_PRIORITIES-1

FreeRTOS与软件定时器有关的配置选项

configUSE_TIMERS

为1则启动软件定时器,还有三个宏也需要定义,

1
2
3
configTIMER_TASK_PRIORITY
configTIMER_QUEUE_LENGTH
configTIMER_TASK_STACK_DEPTHxxxxxxxxxx

configTIMER_TASK_PRIORITY

设置定时器任务的优先级,0~configMAX_PRIORITIES-1,如果定时器任务的优先级高的话,定时器的队列和回调函数会及时处理。

configTIMER_QUEUE_LENGTH

设置定时器队列的队列长度。

configTIMER_TASK_STACK_DEPTH

定时器任务的堆栈,可以根据定时器回调函数的大小,定义定时器任务堆栈大小。

FreeRTOS与中断有关的配置选项

__NVIC_PRIO_BITS

设置优先级位数,STMF407,是高四位,也就是BIT4,5,6,7

configLIBRARY_LOWEST_INTERRUPT_PRIORITY

设置最低优先级,因为STM32的NVIC配置的组4,也就是16位抢占优先级,所以最低优先级为15,ARM的0优先级最大。

configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY

FreeRTOS可以管理的最低优先级,如果设为5的话,0-5不归FREERTOS管,其余的RTOS可以通过API函数管理。与BASEPRI这个寄存器相关。

configKERNEL_INTERRUPT_PRIORITY

这个是设置内核中断优先级,也就是系统中断的PenSV和SysTick(滴答定时器)

configMAX_SYSCALL_INTERRUPT_PRIORITY

设置FreeRTOS的API函数的优先级,低于此优先级的中断可以安全调用FREERTOS的API函数,高于此优先级时,如果调用API函数,中断也可以打断。

总结

上面有些宏,从字面意思理解并不难,但是我们需要结合相应的功能,才能熟练运用。

-------------本文结束感谢您的阅读-------------