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

以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 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值