在使用KEIL做F4的項目的時候發現RAM區有片上IRAM2選項,查了datesheet后發現這塊是CCM內存區
CCM內存是在地址0x1000000映射的64KB塊,只提供CPU通過數據D總線進行訪問。如何利用這塊內存呢?
首先打開工程配置,如上,對IRAM2進行勾選
雙擊工程文件夾,打開.map,可以看到RW_IRAM2已經使用
但因為這段內存是只能CPU訪問的,一旦將數據分配至CCM內存,而同時使用了DMA訪問他,那么就會出現問題,如何避免這種情況發生呢
我們可以自己來直接分配
將需要的數據用__attribute__((at(section)))來進行段定義,再次編譯后,就會發現數據被存在該塊中
這里來引入一個概念,叫分散加載文件(scatter file)可以在link文件夾中找到,.sct后綴。
分散加載文件是一個文本文件,通過編寫一個分散加載文件來指定ARM連接器在生成映像文件時如何分配RO,RW,ZI等數據的存放地址。如果不用SCATTER文件指定,那么ARM連接器會按照默認的方式來生成映像文件,一般情況下我們是不需要使用分散加載文件的。但在某些場合,我們希望把某些數據放在指定的地址處,那么這時候SCATTER文件就發揮了非常大的作用。而且SCATTER文件用起來非常簡單好用。
所以如果我們需要將某些數據塊分配至CCM內存塊時,就可以通過修改sct文件實現
首先需要取消自動的內存映射
然后打開.sct文件,進行修改