有些全局变量初始化过程中会申请堆内存,但此时还没有进行rt_system_heap_init,就导致卡死在这里,可以将堆内存初始化移到SystemInit中执行吗,可能会有什么问题
问题复现方式,使用arm compiler 6
在.cpp文件中
#include
std::vector g_datas;
会发现执行SystemInit后初始化全局变量过程中,会调用rt-thread\components\libc\compilers\armlibc\syscall_mem.c中的malloc,进而调用rt_malloc,size是16
PS:虽说vector使用中会用到heap,但是默认初始化应该是不申请heap的,且我使用其他不申请HEAP的容器方案(比如 etl::vector<int,10> g_datas;)也会申请16字节heap,就很奇怪,也没能查到原因
void SystemInit(void)
{
/* FPU settings ------------------------------------------------------------/
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
SCB->CPACR |= ((3UL << 102)|(3UL << 112)); / set CP10 and CP11 Full Access /
#endif
#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
SystemInit_ExtMemCtl();
#endif / DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM /
/ Configure the Vector Table location -------------------------------------/
#if defined(USER_VECT_TAB_ADDRESS)
SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; / Vector Table Relocation in Internal SRAM /
#endif / USER_VECT_TAB_ADDRESS */
// 原本在rt_hw_board_init中
#if defined(RT_USING_HEAP)
rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END);
#endif
}
更多回帖