一、在IAR的集成开发环境中实现数据变量定位方法如下三种
1、__no_init char alpha @ 0x0200;
2、#pragma location = 0x0202
const int beta;
3、const int gamma @ 0x0204 = 3;
或:
1)__no_init int alpha @ "MYSEGMENT"; //MYSEGMENT段可在XCL中开辟
2)#pragma location="MYSEGMENT"
const int beta;
3)const int gamma @ "MYSEGMENT" = 3;
二、如何实现函数定位
在IAR中函数定位有两种写法
1. void g(void) @ "MYSEGMENT" //MYSEGMENT段可在XCL中编辑开辟
{
}
或
2、#pragma location = "MYSEGMENT"
void h(void)
{
}
三、如何更改XCL文件
注意:在实现过程中可能涉及到.XCL连接文件的更改,请保存好原来的.XCL文件!
1. 打开相应的*c.xcl文件,用"-Z(CONST)段名=程序定位的目标段-FFDF"定义段的起始地址.
2. 在自己的C程序中用#pragma constseg(段名)定位自己的程序
3. 结束后恢复编译器的默认定位#pragma default(可以不要)
例:
IAR 1.26b环境下:
1、将常量数组放在FLASH段自定议的MYSEG段中
原来的MSP430F149XCL文件如下:
// Constant data
-Z(CONST)DATA16_C,DATA16_ID,DIFUNCT,CHECKSUM=1100-FFDF
如果想从中分出一部分做数据存储区,做如下修改:
-Z(CONST)DATA16_C,DATA16_ID,DIFUNCT,CHECKSUM=1500-FFDF //将1100-14FF从ROM中分出存储arry数组
-Z(CONST)MYSEG=1100-14FF
区间大小可自行决定
在程序中描写如下即可:
#pragma memory = constseg(MYSEG) //在.XCL文件中修改
char arry[]={1,2,3,4,5,6,7};
#pragma memory = default
2、将变量放入所命名的段
在XCL文件中开辟一段MYSEG段,如上所述
#pragma memory = dataseg(MYSEG)
char i;
char j;
int k;
#pragma memory = default
#pragma constseg="TASK_BT_SEG_CONST"
IAR_CONST char str_show_taskbt[] = "task_bt\n";//常量字符串
#pragma constseg=default
#pragma dataseg = IXRAM // use external RAM
__no_init unsigned char teat[10]; // __no_init不能少
#pragma dataseg = default
四、其它说明
代码
Linker已经为每一个bank定义了一个代码空间。对于banked的函数,不需要每次都定义,Linker会自动分配代码空间。
f()和g()将会放在BANK1代码段中,主函数会默认也放在BANK1的代码段中。如果想让主函数放在BANK0中,要使用关键字__near_func
变量
PM0_XDATA定义在linker文件中。这个地址的范围为0xE000到0xEFFF。有必要明确的定义变量存在这个区域。如果变量按照默认的方式,他们将会存在放在F000到0xFD57中。