我最近 (201410) 才從 datasheet 知道 ccm 這東西。stm32f4discovery 有 192k sram, 不過是這樣分佈的:
sram1: 112k
sram2: 16k
ccm (core coupled memory): 64k
sram1, sram2 從 0x2000 0000 開始的 128k
ccm 從 0x1000 0000 開始的 64K
192k 的位址並不連續, 而且 ccm 只能存資料, 無法存指令, 那麼該怎麼運用這塊記憶體呢? 我把他用在 stack 上, 有 64k 的 stack, 在這嵌入式平台上真是奢侈。
修改 linker script 加入一個 .ccm section, 以及在程式碼使用 __attribute__((section(".ccm"))), 將某個變數存放到 .ccm section。
以下是根據 stm32.ld 編譯出來的 bin 檔。
前四個 byte 是 sp 的位址, 已經指到 ccm 區域。不過我用 gdb step 時, sp 的值是 0x1000fffc, 這是個疑問??是 alignment 的問題, 改成
#define STACK_SIZE 0xfff0, sp 就是 0x1000fff0。
完整範例:
https://github.com/descent/stm32f4_prog/tree/master/float
ref:
http://wiki.csie.ncku.edu.tw/embedded/Flash
沒有留言:
張貼留言
使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。
我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。