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 
### GD32F470与LVGL图形界面开发教程 #### 获取官方资源和支持材料 对于希望在GD32F470单片机上部署LVGL图形库并开展GUI应用开发者而言,可以从兆易创新官方网站下载专门针对该系列微控制器编写的移植指南[^1]。这份文档不仅涵盖了必要的配置步骤,还提供了详细的实例说明来帮助工程师快速入门。 #### 配置环境准备 为了确保项目顺利启动,在着手编写任何代码之前,建议仔细阅读目标硬件的数据手册以及相关外设的操作手册,这有助于理解具体实现细节和可能遇到的技术挑战[^2]。特别是当涉及到特定功能模块如触摸屏接口或是显示驱动器时,这些参考资料显得尤为重要。 #### 实现按键检测机制 如果计划让设备具备响应物理按钮输入的能力,则需进一步查阅有关GPIO端口操作的信息,并据此选定合适的I/O引脚用于连接外部开关元件[^3]。通过这种方式,不仅可以增强用户体验感,也为后续扩展更多交互方式打下了良好基础。 #### 解决内存分配问题 值得注意的是,由于GD32F470内部SRAM容量限制(最大可利用空间约为448KB),因此在规划应用程序架构时要特别留意这一点。一种可行方案是借助RTOS内核所提供的多区域动态存储管理特性——例如RT-Thread中的`memheap`组件——来进行优化处理,从而有效规避潜在瓶颈[^4]。 ```c // 初始化TCMSRAM作为额外的堆区 #include "rtthread.h" extern int rt_system_heap_init(void *start_addr, void *end_addr); void tcm_sram_init() { /* 假定TCMSRAM起始地址为0x2001C000 */ extern unsigned char __tcm_start__; extern unsigned char __tcm_end__; rt_system_heap_init(&__tcm_start__, &__tcm_end__); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值