我使用的是MCU是MSP430F5359,RAM资源有66K,分成两段地址,2400-63FF和F0000-FBFFF,但是目前只能使用低地址段(2400-63FF),高地址段F0000-FBFFF无法使用,程序中当需求的RAM资源超过低地址段量时编译时就报错,请问应该怎样启用高地址段RAM呢?我使用的编译器为IAR6.3,DATA MODEL 选择为MIDIUM,库为CLIB;
配置文件采用默认文件lnk430f5359.xcl,其中对RAM的配置如下:
-Z(DATA)DATA16_I,DATA16_Z,DATA16_N,TLS16_I=2400-63FF
-Z(DATA)DATA16_HEAP+_DATA16_HEAP_SIZE
-Z(DATA)CODE_I
-Z(DATA)CSTACK+_STACK_SIZE#
-Z(DATA)DATA20_I,DATA20_Z,DATA20_N,DATA20_HEAP+_DATA20_HEAP_SIZE=2400-63FF,F0000-FBFFF
我尝试过将DATA MODEL 改为LARGE ,但是编译会出问题:
Error[e18]: Range error, Number out of range. Valid range is -32768 (-0x8000) to 65535 (0xFFFF). File: G:\GLUCOSE\DILUTE\SOFT\mcu_dilute\sourcefiles\cstartup.s43, Line: 350 Source: MOV.W #(SFB DATA20_ID), CW1 Where $ = ?cstart_init_copy20 + 0x6 [0x8050] in module "?cstart" (G:\GLUCOSE\DILUTE\SOFT\mcu_dilute\Debug\Obj\cstartup.r43), offset 0x6 in segment part 22, segment CSTART What: 0 + SFB(DATA20_ID) [0x257A6] Allowed range: 0xFFFF8000 – 0xFFFF Operand: #no label found# [0x257a6] in module ?cstart (G:\GLUCOSE\DILUTE\SOFT\mcu_dilute\Debug\Obj\cstartup.r43), Offset 0x0 in segment part 9, segment DATA20_ID
cstartup文件我采用的也是IAR自带的,基本没做什么更改,见附件。
灰小子:
1. 在IAR 的集成开发环境中.选中你的工程,右键,点options,
2. 在Target 页面中,Data Model选项,4选中Medium或Large,
3. 解释:
– 选中SMALL只能访问64K以内的空间,以外的空间只能有内部函数访问
– 选中Medium 可以访问1M以内的空间
– 选中Large可以访问全部空间
不知道你的代码是怎么样的。建议先把main内的代码都注释掉,编译看有没有问题,没问题再放入一小段代码,这样逐渐定位问题所在
user4850822:
回复 灰小子:
Data Model我现在选择的就是MIDIUM啊,我分析要启用F0000-FBFFF的RAM,Data Model必须要选择为LARGE,但问题是选择LARGE后,编译会出错,应该是要更改cstartup文件,这个文件是汇编写的,不知道怎么改?望大神指教!
user4850822:
回复 user4850822:
麻烦TI员工帮忙回复分析一下,谢谢!急!急!急!