問(wèn):我想把Page1的ROM空間里最高地址的128個(gè)字節(jié)放到一邊,我們會(huì)用外部的軟硬件來(lái)額外地寫入這些字節(jié)位置(我將會(huì)在生產(chǎn)線上對(duì)這些單片機(jī)做帶有系列號(hào)的串行編程SQTP),顯然,這些字節(jié)是只讀的。有沒(méi)有什么建議來(lái)把這樣一塊ROM放到一邊呢?
答:我們有如下建議;在你的C模塊里放置下面的代碼:
extern const char myarray[]; // 這里不要聲明數(shù)組的大小
#asm
psect reserved,class=CODE,delta=2
global _myarray
_myarray:
ds 128 ;保留128個(gè)字
#endasm
現(xiàn)在來(lái)加入linker options,把下面的PICC命令行加入:
-l-preserved=0F80h
于是你就在F80地址開(kāi)始得到了128個(gè)字的空間,而且這個(gè)地址空間會(huì)被鏈接器在分配代碼空間時(shí)避開(kāi)。
如果你需要預(yù)初始化這些單元到FF或者其他值,那么它應(yīng)該象這樣:
#asm
psect reserved,class=CODE,delta=2
global _myarray
_myarray:
retlw 0xFF
retlw 0xFF
; 重復(fù)你需要的次數(shù)
#endasm
如果要在C代碼中訪問(wèn)這些SQTP的系列號(hào),可以這樣:
#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代碼可以這樣訪問(wèn)這些系列號(hào):
main()
{
char ch;
ch = sqtp[3]; //把表格的第四個(gè)字節(jié)賦給變量ch。
}
你可以通過(guò)額外的命令行選項(xiàng)來(lái)把這個(gè)表格放置到任何你需要的地址位置:(build option->global->additional command line options)。
加入
-l-pXXX=0YYYh
這里XXX是你使用的表格的名稱,YYY是地址。例如:-l-psqtp=01000h
這將把表格sqtp放置到地址0x1000。
-
單片機(jī)
+關(guān)注
關(guān)注
6067文章
44982瀏覽量
650291 -
ROM
+關(guān)注
關(guān)注
4文章
578瀏覽量
87333 -
編譯器
+關(guān)注
關(guān)注
1文章
1662瀏覽量
50202
發(fā)布評(píng)論請(qǐng)先 登錄
PIC系列單片機(jī)的優(yōu)勢(shì)所在。
PIC單片機(jī)與51系列單片機(jī)的區(qū)別
PIC單片機(jī)是如何命名的
PIC單片機(jī)基礎(chǔ)知識(shí)
PIC系列單片機(jī)通用目標(biāo)電路板的設(shè)計(jì)
PIC單片機(jī)開(kāi)發(fā)的幾個(gè)問(wèn)題
PIC單片機(jī)教程_PIC單片機(jī)學(xué)習(xí)要點(diǎn)

PIC系列單片機(jī)的開(kāi)發(fā)應(yīng)用技術(shù)

pic單片機(jī)程序設(shè)計(jì)的基本方法解析
【轉(zhuǎn)】PIC單片機(jī)的命名規(guī)則

PIC系列單片機(jī)

評(píng)論