本文主要是介绍GD32F470内存不能设置512KB,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近研究了下GD32F470芯片手册,发现标称的内存512KB, 其实是连TCMSRAM一起算的,即TCMSRAM+SRAM0+SRAM1+SRAM2+ADDSRAM = 512KB, 其中SRAM0 - ADDSRAM 这段内存地址是连续的,从地址0x20000000开始。而TCMSRAM地址却是从0x10000000 - 0x1000FFFF, 即64KB。如下图:
所以第一个连续内存只能写448KB。GD32F450芯片也是有类似同上的分存分布。相当于存在两个内存堆了,目前使用RT-thread 提供的memheap 多内存堆使用方法,在 broad.c文件手动加上TCMSRAM初始化,经测试可以正常使用。
#define HEAP_TMCSRAM_BEGIN (0x10000000)
#define HEAP_TCMSRAM_SIZE (64*1024) struct rt_memheap tcmsram; void rt_hw_board_init()
{ /* NVIC Configuration */
#define NVIC_VTOR_MASK 0x3FFFFF80
#ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x10000000 */ SCB->VTOR = (0x10000000 & NVIC_VTOR_MASK);
#else /* VECT_TAB_FLASH */ /* Set the Vector Table base location at 0x08000000 */ SCB->VTOR = (0x08020000 & NVIC_VTOR_MASK);
#endif SystemClock_Config();#ifdef RT_USING_COMPONENTS_INIT rt_components_board_init();
#endif#ifdef RT_USING_CONSOLE rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
#endif#ifdef BSP_USING_SDRAM rt_system_heap_init((void *)EXT_SDRAM_BEGIN, (void *)EXT_SDRAM_END);
#else rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END); rt_memheap_init(&tcmsram, "tcmsram", (void*)HEAP_TMCSRAM_BEGIN, (rt_size_t)HEAP_TCMSRAM_SIZE);
#endif
}
参考:
RT-Thread-GD32F470VGT6内存不能设置512KBRT-Thread问答社区 - RT-Thread
这篇关于GD32F470内存不能设置512KB的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!