Error: L6218E: Undefined symbol vApplicationGetIdleTaskMemory (referred from tasks.o).
在使用STM32H750的芯片移植FreeRTOS过程中遇到的该问题记录,为什么会出现该问题后续深入分析。
将FreeRTOS的源码在Keil中添加了文件和头文件路径(具体怎么添加网上随便搜都有)
使用Keil编译后出现下图所示的两行的报错:
![]()
如何解决该问题,那就是在FreeRTOSConfig.h的文件中将configSUPPORT_STATIC_ALLOCATION配置为0,然后重新编译。
根据Keil内部自带的查找工具查找vApplicationGetIdleTaskMemory函数,发现其在下图所示的函数中进行了调用:


可以发现在FreeRTOSConfig.h中将configSUPPORT_STATIC_ALLOCATION使能后,就会编译以下代码段,而下面代码段中就包含了vApplicationGetIdleTaskMemory这一函数。
继续查找,会来到定义vApplicationGetIdleTaskMemory函数的代码段,但该函数默认状态下是被取消编译的:

还有vApplicationGetTimerTaskMemory函数情况也是一样的:

这其中就涉及到了三个配置项:
1.configSUPPORT_STATIC_ALLOCATION
2.configKERNEL_PROVIDED_STATIC_MEMORY
3.portUSING_MPU_WRAPPERS
至于后面两个配置项的作用后续进行分析,大致看下来一个是和MPU封装相关、另一个是内核提供静态内存相关
在FreeRTOS官网有定制配置项相关的内容,其中就包含了FreeRTOSConfig.h中各个配置项的含义和用法,取configSUPPORT_STATIC_ALLOCATION配置项的说明,如下所示:

从描述来看,在使能configSUPPORT_STATIC_ALLOCATION时,需要我们自己定义vApplicationGetIdleTaskMemory、vApplicationGetTimerTaskMemory这两个函数。
下面是官方示例以及函数建立的说明:

以下是对上面两个函数注释的机翻:


更多推荐
所有评论(0)