介绍L6218E提示错误信息为Undefined symbol _Heap2Base (referred from soc_impl.o)时,如何和处理。

问题描述

L6218E提示错误信息:Undefined symbol _Heap2Base (referred from soc_impl.o)。

问题解决

按照AliOS Things移植文档里中的说明配置内核的堆,问题得到解决。文档说明内容如下。
2.2.6.3 内核使用堆的配置
如果要使用内存申请功能,则需要打开RHINO_CONFIG_MM_TLF宏,来使能k_mm模块,并且配置对应的堆空间。
堆空间定义有三种方式:链接脚本定义、汇编定义、数组定义。推荐方式:链接脚本定义。
其基本原则是要预留一个内存空间作为堆使用,并将其交给g_mm_region管理。
该问题主要由soc_impl.c文件里的代码造成,该soc_impl.c文件的内容如下所示。
extern void *__HeapBase;
extern void *__HeapLimit;
extern void *__Heap2Base;
k_mm_region_t g_mm_region[] = {
{(uint8_t *)&__HeapBase, (uint32_t)0x8000},
{(uint8_t *)&__Heap2Base, (uint32_t)0x8000}
};
int g_region_num = sizeof(g_mm_region)/sizeof(k_mm_region_t);

您可以根据移植文档,修改soc_impl.c文件和.sct文件来解决。也可以使用数组定义和汇编定义的方法进行修改,具体请参见platform/mcu/stm32l4xx_cube/aos/soc_impl.c中的方法。

说明 其它的芯片可能也会遇到相同的问题,也可以参见以上的方法进行解决。