|
|
涉及操作系統(tǒng)堆棧處理的時(shí)候,必須對堆棧地址相當(dāng)清晰,因此查閱了部分資料和網(wǎng)上論壇,發(fā)現(xiàn)在對keil中對C51的各個(gè)地址標(biāo)號表示的很不清晰,現(xiàn)在做以下總結(jié):
C:0x0000~C:0xFFFF 代表單片機(jī)的ROM地址,尋址空間為64KB,其中
C:0x0000~C:0x0FFF 是內(nèi)建ROM空間,總共有4KB(比較一下電腦,論TB算,甚至還有PB什么的,這個(gè)差距,單片機(jī)你不要太精簡啊...)
C:0x1000~C:0xFFFF 是單片機(jī)的外部ROM尋址空間,一共60KB
X:0x000000~X:0x00FFFF 代表單片機(jī)外部的RAM地址,尋址空間為64KB
D:0x00~D:0xFF 是內(nèi)建RAM空間,一共有256BYTE(注意,8051系列單片機(jī)只有128BYTE)(才256字節(jié),連1KB都不到。想想我們的電腦,現(xiàn)在的RAM都上升到GB了。)
I:0x00~I:0x00FF 是內(nèi)建RAM空間,一共有256BYTE((注意,8051系列單片機(jī)只有128BYTE)(唉,這就是差距,這樣說來,給堆棧的空間也小得可憐了,還要扣掉0x00~0x2F這片被工作寄存器占用和位尋址占用的48字節(jié)地址,節(jié)約下來總共才只有208字節(jié),必須相當(dāng)節(jié)省地去用了)
區(qū)別一下D和I,由于單片機(jī)的RAM在高128字節(jié)是雙映射即在0x80~0xFF這片地址中,特殊寄存器與RAM空間地址是重合的,對于這個(gè)設(shè)計(jì)我也感到相當(dāng)費(fèi)解,難道是要節(jié)約空間么?
因此,在單片機(jī)調(diào)用程序讀取數(shù)據(jù)的時(shí)候,使用I:0xXX作為RAM的地址,使用D:0xXX作為特殊寄存器的地址。除此之外,二者的功能是一樣的,尋址的RAM空間相同。
|
|