GD32F4的TCMSRAM(紧耦合SRAM)该如何使用?
2024-11-18 来源:elecfans
如下图所示,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) } }
。