您的位置:首页 > 其它

【MSP430 编译器使用经验】+ IAR 环境下的函数定位加载(分散加载)方法

2015-10-26 12:09 239 查看
以MSP430AFE253为例分享IAR(5.5)环境下的函数定位方法

1、修改XCL配置文件

在IAR的安装目录 Tools\430\config下找到lnk430afe253.xcl文件,将其拷贝到当前工程目录下;

设置项目中链接文件的位置(将默认位置改为修改后lnk430afe253.xcl文件的存放位置),如下图所示:



打开 lnk430afe253.xcl 文件,找到 CODE 字段的定义,在其中添加以下语句:

// 在我的项目中需要将一段代码放置在地址 0xF000 起始位置处,故定义 MYCODE 代码段如下

-P(CODE)MYCODE=F000-F1FF

如下图示:



2、在代码中指定下载位置

共有两种写法可以实现函数的定位:

1)、void fun(void) @ "MYCODE"

{}

2)、

#pragma location = "MYCODE"

void fun(void)

{

}

另外,结束后要回复编译器默认的定位

#pragma location = "CODE"

3、下载后查看FLASH内容

代码示例:

#pragma location = "MYCODE"

void DefaultIO(void)

{

P1DIR = 0xFF;

P1OUT = BIT3;

P2SEL &= ~(BIT6 | BIT7);

P2DIR = 0xFF;

P2OUT = BIT0;

}

#pragma location = "CODE"

下载后memory内容截图:



IAR开发环境中的数据、函数定位方法

一、在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段中 原来的MSP430F149 XCL文件如下: // 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: