如下圖所示,GD32F4系列內(nèi)部SRAM分為通用SRAM空間和TCMSRAM空間,其中通用SRAM為從0x20000000開始的空間,TCMSRAM為從0x10000000開始的64KB空間。大家一般使用的均為通用SRAM空間,這部分SRAM使用的時候沒有限制,作為堆棧、變量、DMA使用等都可以,但TCMSRAM一般不使用,有的時候可能會被大家遺忘,如果大家碰到SRAM資源不足的時候,可以看看是否有TCMSRAM沒有用到,如果沒有用到,可以參考下本視頻將TCMSRAM使用起來,你將會多出64KB的SRAM空間。


而TCMSRAM如何使用呢?TCMSRAM為緊耦合SRAM,該SRAM僅可被M4內(nèi)核訪問,因而該TCMSRAM空間不能被外設(shè)比如DMA訪問,TCMSRAM與處理器內(nèi)核直連,具有更快的訪問速度和更低的訪問延遲,可以用于加速關(guān)鍵任務(wù)的執(zhí)行,提高系統(tǒng)的實時性能和響應(yīng)速度。
使用TCMSRAM可以使用分散加載的方式,將需要放置到TCMSRAM中的變量手動加載到TCMSRAM中,具體有以下兩種方法:
- 直接通過 __attribute__加載到TCMSRAM中,如下所示。
uint32_t TX_Data[5] __attribute__((at(0x10000000)))={0};
- 通過修改SCT文件,并將變量分散加載到對應(yīng)的段中,如下所示。
代碼中的操作如下: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:
以上即為本期講解,如有問題或建議,歡迎評論區(qū)討論。