為了提高同步性,SRAM分兩部分;上半部分只能system bus訪問。是否說程序能用的SRAM只能是下半部分?
3.5.3.4 SRAM accessesThe SRAM is split into two logical arrays that are 32-bits wide.? SRAM_L — Accessible by the code bus of the Cortex-M4 core and by the backdoorport.? SRAM_U — Accessible by the system bus of the Cortex-M4 core and by the backdoor port.
由于Kinetis K系列芯片使用的是ARM Cortex M4內(nèi)核,其使用哈弗架構,內(nèi)部的SRAM被分成了兩部分,通過不同的總線訪問。也就是說,SRAM分成了兩部分,雖然邏輯地址是連續(xù)的,但是這兩部分SRAM不能當成一個連續(xù)空間來使用。因此,請避免將heap大小設置超過1/2 SRAM大小,否則在使用過程中會產(chǎn)生錯誤。
謝謝回復。這樣有個問題,全局變量包括heap 都是占用SRAM_L內(nèi)存;如何使用SRAM_U內(nèi)存? 需要評估全局變量大小,棧和堆的大小,不要跨界使用就可以。客戶可以參考IAR工程的鏈接配置文件,將RAM區(qū)域分成兩部分,根據(jù)實際使用情況選擇合適的放置區(qū)域:/-Sizes-/define symbol ICFEDIT_size_cstack = 0x1000;define symbol ICFEDIT_size_heap = 0x200;define symbol ICFEDIT_region_RAM_start = 0x1FFF0410;define symbol ICFEDIT_region_RAM_end = 0x20000000;define symbol region_RAM2_start = 0x20000000;define symbol region_RAM2_end = 0x20010000;define region RAM_region = mem:[from ICFEDIT_region_RAM_start to ICFEDIT_region_RAM_end] | mem:[from region_RAM2_start to region_RAM2_end];place in RAM_region { readwrite, block CodeRelocateRam, block CSTACK, block HEAP };一般的工程只需要使用使用SRAM_L,客戶需要根據(jù)實際使用情況來調(diào)整,同一個函數(shù)或者變量不要跨界(0x2000_0000)就行。祝順利。