在线时间15 小时
UID421178
注册时间2013-3-15
NXP金币0
该用户从未签到
金牌会员
 
- 积分
- 2167
- 最后登录
- 1970-1-1
|
发表于 2014-5-16 11:20:04
|
显示全部楼层
回复:Keil下分配K10内部64KRAM出错?
回复第 4 楼 于2014-05-14 22:40:01发表:
回复第 3 楼 于2014-05-14 14:29:23发表:
由于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)就行。
祝顺利。
|
|