IAR切BANK--程序中的使用
一、在IAR的集成開發(fā)環(huán)境中實(shí)現(xiàn)數(shù)據(jù)變量定位方法如下三種
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;
?
二、如何實(shí)現(xiàn)函數(shù)定位
在IAR中函數(shù)定位有兩種寫法
1. void g(void) @ "MYSEGMENT"?? //MYSEGMENT段可在XCL中編輯開辟
{
}
?或
2、#pragma location = "MYSEGMENT"
void h(void)
{
}
三、如何更改XCL文件
注意:在實(shí)現(xiàn)過程中可能涉及到.XCL連接文件的更改,請(qǐng)保存好原來(lái)的.XCL文件!
1. 打開相應(yīng)的*c.xcl文件,用"-Z(CONST)段名=程序定位的目標(biāo)段-FFDF"定義段的起始地址.
2. 在自己的C程序中用#pragma constseg(段名)定位自己的程序
3. 結(jié)束后恢復(fù)編譯器的默認(rèn)定位#pragma default(可以不要)
例:
IAR 1.26b環(huán)境下:
1、將常量數(shù)組放在FLASH段自定議的MYSEG段中
原來(lái)的MSP430F149XCL文件如下:
// Constant data
-Z(CONST)DATA16_C,DATA16_ID,DIFUNCT,CHECKSUM=1100-FFDF
?
如果想從中分出一部分做數(shù)據(jù)存儲(chǔ)區(qū),做如下修改:
-Z(CONST)DATA16_C,DATA16_ID,DIFUNCT,CHECKSUM=1500-FFDF //將1100-14FF從ROM中分出存儲(chǔ)arry數(shù)組
?
-Z(CONST)MYSEG=1100-14FF
區(qū)間大小可自行決定
?
在程序中描寫如下即可:
#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已經(jīng)為每一個(gè)bank定義了一個(gè)代碼空間。對(duì)于banked的函數(shù),不需要每次都定義,Linker會(huì)自動(dòng)分配代碼空間。
f()和g()將會(huì)放在BANK1代碼段中,主函數(shù)會(huì)默認(rèn)也放在BANK1的代碼段中。如果想讓主函數(shù)放在BANK0中,要使用關(guān)鍵字__near_func
變量
PM0_XDATA定義在linker文件中。這個(gè)地址的范圍為0xE000到0xEFFF。有必要明確的定義變量存在這個(gè)區(qū)域。如果變量按照默認(rèn)的方式,他們將會(huì)存在放在F000到0xFD57中。
總結(jié)
以上是生活随笔為你收集整理的IAR切BANK--程序中的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于Elman神经网络的数据回归预测
- 下一篇: ASP.NET MVC 个人学习笔记之