查看原文
其他

FreeRTOS_006_FreeRTOSConfig.h配置文件(三)

strongerHuang strongerHuang 2021-01-31


写在前面

关于FreeRTOSConfig.h配置文件里面的内容除了“通用配置”之外,其他配置的内容初学者用的相对较少,理解起来也相对难一点。为了让初学者有一个大概的了解,本文依然继续讲述关于FreeRTOSConfig.h配置的内容,后期会结合应用更进一步讲述关于FreeRTOSConfig.h的内容。


TIMERS配置

TIMER即定时器,在RTOS中的TIMER属于软件定时。FreeRTOS的定时器精度不高,会随着定时的增加而改变,特别是TIMER任务优先级较低,高优先级占用资源的情况下。

若要使用高精度的定时,还是最后使用硬件的定时器(现在处理器一般都有多个硬件TIMER)。


1.configUSE_TIMERS

是否使用软件定时器


配置为0:不使用

配置为1:使用


其他许多相关的功能都需要结合该配置才能使用,使用时需要注意是否关联。


2.configTIMER_TASK_PRIORITY

软件定时器任务优先级


软件定时器其实也是需要创建一个任务,创建方式和我们常规的一样,只是它是有系统内核完成,不用我们自己写创建任务代码。

这里的这个优先级就是定时器任务的优先级。


3.configTIMER_QUEUE_LENGTH

软件定时器命令队列长度


关于TIMER的命令队列牵涉的知识相对复杂点,后期进一步讲述,可看下图:


4.configTIMER_TASK_STACK_DEPTH

分配给软件定时器的堆栈空间


CO_ROUTINES配置

CO_ROUTINES这个不好翻译,网上都叫协同程序,或者合作程序,理解为协同一起使用的程序,后期结合应用讲述。


1.configUSE_CO_ROUTINES

是否使用CO_ROUTINES


配置为0:不使用

配置为1:使用


2.configMAX_CO_ROUTINE_PRIORITIES

CO_ROUTINE优先级


MEMORY配置

内存分配相关的配置,这里的配置与heap_x.c有关,后面会再次进行讲述。


1.configSUPPORT_STATIC_ALLOCATION

是否支持静态分配


配置为0:不支持

配置为1:支持


2.configSUPPORT_DYNAMIC_ALLOCATION

是否支持动态分配


配置为0:不支持

配置为1:支持


3.configTOTAL_HEAP_SIZE

分配给系统的堆栈


创建任务,堆栈,静态、动态都分配的内存都来自这里。


4.configAPPLICATION_ALLOCATED_HEAP

APP使用哪里分配的堆


配置为0:使用系统分配的堆

配置为1:使用外部分配的堆


默认使用系统分配的堆,见下面定义:


#if(configAPPLICATION_ALLOCATED_HEAP == 1 )

  extern uint8_t ucHeap[configTOTAL_HEAP_SIZE];

#else

  static uint8_t ucHeap[configTOTAL_HEAP_SIZE];

#endif


RUN_TIME_STATS配置

运行时信息统计配置


1.configGENERATE_RUN_TIME_STATS

是否生成统计信息


配置为0:否

配置为1:是


2.configUSE_TRACE_FACILITY

是否协助执行可视化和跟踪


配置为0:否

配置为1:是


这里会添加额外的结构体来实现。


3.configUSE_STATS_FORMATTING_FUNCTIONS

是否统计相关的功能


配置为0:否

配置为1:是


设置宏configUSE_TRACE_FACILITY和configUSE_STATS_FORMATTING_FUNCTIONS为1会编译vTaskList()和vTaskGetRunTimeStats()函数。如果将这两个宏任意一个设置为0,上述两个函数不会被编译。


其他配置

这里简单综合讲述一下各项配置


1.configASSERT

断言配置


2.Interrupt相关

configKERNEL_INTERRUPT_PRIORITY:内核中断优先级

configMAX_SYSCALL_INTERRUPT_PRIORITY:系统调用最大的优先级

configMAX_API_CALL_INTERRUPT_PRIORITY:API调用的最大优先级


这一节与(Cortex)内核硬件中断有关。


3.INCLUDE配置

#define INCLUDE_vTaskPrioritySet   1

#define INCLUDE_uxTaskPriorityGet  1

#define INCLUDE_vTaskDelete       1


这里很好理解,是否包含这一些内容,在UCOS中比较常见。


最后

推荐阅读:

FreeRTOSConfig.h配置文件(一)_通用配置

FreeRTOSConfig.h配置文件(二)_HOOK钩子函数


微信搜索“EmbeddDeveloper” 或者扫描下面二维码、关注,在我的底部菜单查看更多精彩内容!

长按识别二维码 关注




    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存