1 個子程序段定位在 1 個固定的地址位置?
以下 2 問題均要用 C51 解決
1。 怎樣將 1 個子程序段定位在 1 個固定的地址位置? 例如將 INT BCD2HEX(INT XX)定位在 1000H
2。 HOW 在 EEPROM 中固定的位置存放 1 字符串? 如在 200H 處放“COPYRIGHT 2001-11”
答: 函數定位與變量定位...
1、函數定位:
假如要把 C 源文件 tools.c 中的函數
int BIN2HEX(int xx)
{
...
}
放在 CODE MEMORY 的 0x1000 處,先編譯該工程,然后打開該工程的 M51 文件, 在
* * * C O D E M E M O R Y * * * 行下找出要定位的函數的名稱,應該形如:
CODE xxxxH xxxxH UNIT ?PR?_BCD2
HEX?TOOLS 然后在:
Project->Options for Target ...->BL51 Locate:Code
中填寫如下內容:
?PR?_BCD2HEX?TOOLS(0x1000)
再次 Build,在 M51 中會發現該函數已放在 CODE MEMORY 的 0x1000 處了
2、賦初值的變量定位:
要將某變量定位在一絕對位置且要賦初值,此時用 _at_ 不能完成,則如下 操作:
在工程中建立一個新的文件,如 InitVars.c,在其中對要處理的變量賦初值
(假設是 code 變 量):
char code myVer = {"COPYRIGHT 2001-11"}; 然后將該文件加入工程,編譯,打開 M51 文件,若定義的是 code 型,則在
* * * C O D E M E M O R Y * * *
下可找到:
CODE xxxxH xxxxH UNIT ?CO?INITV ARS
然后在:
Project->Options for Target ...->BL51 Locate:Code
中填入:
?CO?INITVARS(0x200) 再次編譯即可。
相應地,如為 xdata 變量,則 InitVars.c 中寫: char xdata myVer = {"COPYRIGHT 2001-11"}; 然后將該文件加入工程,編譯,打開 M51 文件,在
* * * X D A T A M E M O R Y * * * 下可找到:
XDATA xxxxH xxxxH UNIT ?XD?INITV ARS
然后在:
Project->Options for Target ...->BL51 Locate:Xdata
中填入:
?XD?INITVARS(0x200)
再次編譯即可。相應地,若定義的是 data/idata 等變量,則相應處理即可。
3、若有多個變量或函數要進行絕對地址定位,則應按地址從低到高的順序排 列。
完整的pdf格式文檔51黑下載地址:
51單片機中怎么將函數或者變量定位到指定地址,非常有用 .pdf
(66.92 KB, 下載次數: 24)
2018-10-13 08:20 上傳
點擊文件名下載附件
51單片機,絕對地址定位
|