7 系统裁剪
-
7.1 简介
FreeRTOS中的系统裁剪和配置其实是通过条件编译的方法来实现的,不止FreeRTOS这么干,很多的协议栈、RTOS系统和GUI库都是使用条件编译的方法来完成配置和裁剪的。在第二章使用静态函数的时候,看到在tasks.c文件中会有如下的代码
可以看出当configSUPPORT_STATIC_ALLOCATION的值为1时,静态创建函数才会被编译。条件编译的好处就是节省空间,不需要的功能就不编译。这样就可以根据实际需求来减少系统占用的ROM和RAM大小,根据自己所使用的MCU来调整系统消耗,降低成本。
FreeRTOS这些宏的定义,即实现配置的过程都是通过FreeRTOSConfig.h和FreeRTOS.h中使用“#define”这样的语句来实现宏定义的。
-
7.2 “INCLUDE_”开始的宏
上面介绍的配置文件中以“INCLUDE_”开头的宏,表示的是FreeRTOS中的宏函数的开关,当相对应的开关宏打开的时候,相应的宏函数才能够使用。
比如,我们要使用vTaskDelay()的话就需要在文件FreeRTOSConfig.h中将宏INCLUDE_vTaskDelay设置为1。
一些单功能可以被裁剪的API函数的定义格式都是这样,都是以“INCLUDE_”+函数名称的方式定义。我们使用的类似Source Insight这样的工具,可以直接帮我们跳到API函数定义的地方。但是如果这个函数被裁剪掉了,那么我们使用这个函数的时候,这个函数拼写完成后的名称会是黑色,而且无法跳转到函数定义的地方。这时候就可以根据自己的需求到FreeRTOSConfig.h和FreeRTOS.h文件中打开对应的开关宏,最好在我们使用结束之后关闭对应的宏,下次使用的时候可以节省资源。
- 7.3 “config”开始的宏
以“config”开始的宏通常对应某种功能的开关,如我们上面所说的configSUPPORT_STATIC_ALLOCATION表示静态应用的支持设置。这个宏的设置为1或0,和静态创建函数xTaskCreateStatic的定义有关,而且与空闲任务和定时器服务任务的创建函数函数都相关,还可能对应着多个函数或者变量的定义和使用。
而且,如果我们搜索这个宏会发现,还有很多地方都和它相关:
使用“INCLUDE_”开始的宏去一一进行条件编译会比较麻烦,所以使用“config”开始的宏统一进行条件编译会比较方便我们的使用,使用这个功能的时候只要把这个宏设置为1,其他对应的变量和函数都会被编译。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)