|
1、編譯器一般會(huì)從30H開始規(guī)劃RAM的使用,這樣你只能用30H-7FH。
2、系統(tǒng)會(huì)根據(jù)程序中,子程序調(diào)用的深度,預(yù)留堆棧的數(shù)量,又用掉一些。
3、函數(shù)在返回?cái)?shù)據(jù)時(shí),也會(huì)用堆棧傳遞結(jié)果,再用掉一些。
4、你的#INCLUDE “??”,函數(shù)中,也會(huì)規(guī)劃掉一些RAM。
……,以上你不易計(jì)算清楚,系統(tǒng)用70個(gè)以上很正常。
另外,你在10#樓的疑問,回復(fù)你一下:
對(duì)于256字節(jié)的RAM芯片,高端的128個(gè)RAM(80-FFH)與特殊寄存器的地址(80-FFH)的確是重復(fù)的!。
CPU為了防止沖突,對(duì)此區(qū)間的訪問作出區(qū)分規(guī)定:
高端的128個(gè)RAM(80-FFH)必須用【間接訪問指令】讀取,
而對(duì)特殊寄存器則采用【直接訪問指令】讀取。
如果你精通匯編,這一點(diǎn)就清楚了!
而對(duì)于低端的RAM(0-7FH)則隨便你用哪種方式訪問。
當(dāng)你用C寫程序時(shí),編譯器會(huì)替你注意的,但需要你知它:變量放在哪!
編譯器會(huì)將你的C程序,編譯成匯編,并注意到【訪問指令】用直接還是間接。
STC在特殊寄存器上做了大量的文章,擴(kuò)充了許多標(biāo)準(zhǔn)51沒有東東,乃至用滿了80-FFH特殊寄存器地址,還不夠!
于是STC人又在XRAM區(qū)域,取出部分地址,用作【擴(kuò)展特殊寄存器】,對(duì)此,標(biāo)準(zhǔn)的編譯方式無法作出區(qū)分的,寫程序時(shí),需要你按STC的CPU說明來寫。
這也是,有些程序在不同芯片之間不能通用的原因之一。也是為什么要用#INCLUDE將芯片型號(hào),告訴編譯器的原因之一。
以上希望能幫到你。如果你想在單片機(jī)上成為高手,必須精通匯編,即使用你不用它,而用C寫程序。
|
|