問:我想把Page1的ROM空間里最高地址的128個字節(jié)放到一邊,我們會用外部的軟硬件來額外地寫入這些字節(jié)位置(我將會在生產(chǎn)線上對這些單片機做帶有系列號的串行編程SQTP),顯然,這些字節(jié)是只讀的。有沒有什么建議來把這樣一塊ROM放到一邊呢?
答:我們有如下建議;在你的C模塊里放置下面的代碼:
extern const char myarray[]; // 這里不要聲明數(shù)組的大小
#asm
psect reserved,class=CODE,delta=2
global _myarray
_myarray:
ds 128 ;保留128個字
#endasm
現(xiàn)在來加入linker options,把下面的PICC命令行加入:
-l-preserved=0F80h
于是你就在F80地址開始得到了128個字的空間,而且這個地址空間會被鏈接器在分配代碼空間時避開。
如果你需要預(yù)初始化這些單元到FF或者其他值,那么它應(yīng)該象這樣:
#asm
psect reserved,class=CODE,delta=2
global _myarray
_myarray:
retlw 0xFF
retlw 0xFF
; 重復(fù)你需要的次數(shù)
#endasm
如果要在C代碼中訪問這些SQTP的系列號,可以這樣:
#define SQTP_table(name,size)
extern const char name[];
asm("global _" ___mkstr(name));
asm("psect " ___mkstr(name) ",class=CODE,delta=2"); asm("_" ___mkstr(name) ":"); asm("rept " ___mkstr(size)); asm("retlw 0"); asm("endm");
SQTP_table(XXX,YYY);//把XXX改成你想要的表格名稱,并把YYY改成表格的大小。例如:SQTP_table(sqtp,16);
C代碼可以這樣訪問這些系列號:
main()
{
char ch;
ch = sqtp[3]; //把表格的第四個字節(jié)賦給變量ch。
}
你可以通過額外的命令行選項來把這個表格放置到任何你需要的地址位置:(build option->global->additional command line options)。
加入
-l-pXXX=0YYYh
這里XXX是你使用的表格的名稱,YYY是地址。例如:-l-psqtp=01000h
這將把表格sqtp放置到地址0x1000。
-
單片機
+關(guān)注
關(guān)注
6030文章
44491瀏覽量
632041 -
ROM
+關(guān)注
關(guān)注
4文章
562瀏覽量
85625 -
編譯器
+關(guān)注
關(guān)注
1文章
1617瀏覽量
49017
發(fā)布評論請先 登錄
相關(guān)推薦
評論