SRAM问题

http://www.openedv.com/thread-66659-1-1.html

为了提高同步性,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内核,其使用哈弗架构,内部的SRAM被分成了两部分,通过不同的总线访问。也就是说,SRAM分成了两部分,虽然逻辑地址是连续的,但是这两部分SRAM不能当成一个连续空间来使用。因此,请避免将heap大小设置超过1/2 SRAM大小,否则在使用过程中会产生错误。

谢谢回复。这样有个问题,全局变量包括heap 都是占用SRAM_L内存;如何使用SRAM_U内存? 需要评估全局变量大小,栈和堆的大小,不要跨界使用就可以。客户可以参考IAR工程的链接配置文件,将RAM区域分成两部分,根据实际使用情况选择合适的放置区域:/-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,客户需要根据实际使用情况来调整,同一个函数或者变量不要跨界(0x2000_0000)就行。祝顺利。

你可能感兴趣的:(SRAM问题)