1.CCM內存介紹:
相較於F2,F4新加的一個特殊內部SRAM。64 KB CCM (內核耦合存儲器)數據 RAM 不屬於總線矩陣(請參見圖 1 : STM32F405xx/07xx和 STM32F415xx/17xx 器件的系統架構)。只能通過 CPU 對其進行訪問(dma等外設不能訪問)。
2.用法(基於MDK):
① 先啓用這部分SRAM。
設置完後,若重新編譯,map文件裏就會有這塊SRAM的資源分配——由於IRAM1優先使用,而且一般SRAM1夠用,就不會給它分配資源。
② 使用CCM一般都要手動分配資源(確保這塊內存不被外設使用),自行分配內存需要這樣操作:
參考下圖,不勾選USE Memory Layout from Targe Dialog,這時mdk會自動載入一個分散加載文件(.sct),修改這個文件就可以手動選擇要放到CCM中的數據了。
③ 查看.map文件,將需要的文件架到(.sct)文件中。
例如,上圖中把mem.o和memp.o中的數據放到CCM中,可以這麼設置:
編譯後,可以看到資源分配:
④如果想把程序中的某些變量放到CCM中,需要定義一個section,將這些變量放到這個section中,再由(.sct)文件分配到CCM中。
編譯後的內存分配:
備註:
1.測試過程中,嘗試直接指定變量的內存到CCM的方法,但是定義多個變量時,編譯報錯。。。
2.據說把系統堆棧放到CCM中,可以提高處理效率,暫時沒法測試。
3.將CCM用作高速運算緩衝,也就這種高大上的應用上才能發揮他真正存在的價值吧。
4.感謝網友大神的帖子:
http://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=602255&extra=page=&page=1
https://blog.csdn.net/zcshoucsdn/article/details/79176306
https://blog.csdn.net/anbaixiu/article/details/78832009
https://blog.csdn.net/louyangyang91/article/details/51545130