GD32F470内存不能设置512KB

最近研究了下GD32F470芯片手册,发现标称的内存512KB, 其实是连TCMSRAM一起算的,即TCMSRAM+SRAM0+SRAM1+SRAM2+ADDSRAM = 512KB, 其中SRAM0 - ADDSRAM 这段内存地址是连续的,从地址0x20000000开始。而TCMSRAM地址却是从0x10000000 - 0x1000FFFF, 即64KB。如下图:

screenshot_图片.png


所以第一个连续内存只能写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

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值