如下图所示,GD32F4系列内部SRAM分为通用SRAM空间和TCMSRAM空间,其中通用SRAM为从0x20000000开始的空间,TCMSRAM为从0x10000000开始的64KB空间。大家一般使用的均为通用SRAM空间,这部分SRAM使用的时候没有限制,作为堆栈、变量、DMA使用等都可以,但TCMSRAM一般不使用,有的时候可能会被大家遗忘,如果大家碰到SRAM资源不足的时候,可以看看是否有TCMSRAM没有用到,如果没有用到,可以参考下本视频将TCMSRAM使用起来,你将会多出64KB的SRAM空间。
而TCMSRAM如何使用呢?TCMSRAM为紧耦合SRAM,该SRAM仅可被M4内核访问,因而该TCMSRAM空间不能被外设比如DMA访问,TCMSRAM与处理器内核直连,具有更快的访问速度和更低的访问延迟,可以用于加速关键任务的执行,提高系统的实时性能和响应速度。
使用TCMSRAM可以使用分散加载的方式,将需要放置到TCMSRAM中的变量手动加载到TCMSRAM中,具体有以下两种方法:
- 直接通过 __attribute__加载到TCMSRAM中,如下所示。
uint32_t TX_Data[5] __attribute__((at(0x10000000)))={0};
- 通过修改SCT文件,并将变量分散加载到对应的段中,如下所示。
代码中的操作如下:uint32_t TX_Data[5] __attribute__((section(".bss.RAM_Array")))={0};SCT文件中的配置如下:
LR_IROM1 0x08000000 0x00300000 { ; load region size_region
ER_IROM1 0x08000000 0x00300000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
.ANY (+XO)
}
RW_IRAM1 0x20000000 0x00020000 { ; RW data
.ANY (+RW +ZI)
} RW_IRAM2 0x10000000 0x00010000 { main.o(.bss.RAM_Array) }}
具体软件代码可参考以下demo:
以上即为本期讲解,如有问题或建议,欢迎评论区讨论。
发表评论 取消回复