【MSP430 編譯器使用經驗】+ IAR 環境下的函式定位載入(分散載入)方法
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