1. 程式人生 > >【MSP430 編譯器使用經驗】+ IAR 環境下的函式定位載入(分散載入)方法

【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