data:
固定指前面0x00-0x7f的128個ram,可以用acc直接讀寫的,速度最快,生成的代碼也最小。
idata:
固定指前面0x00-0xff的256個ram,其中前128和data的128完全相同,只是因為訪問的方式不同。idata是用類似c中的指針方式 訪問的。匯編中的語句為:mox acc,@rx.(不重要的補充:c中idata做指針式的訪問效果很好)
xdata:
外 部擴展ram,一般指外部0x0000-0xffff空間,用dptr訪問。 pdata:外部擴展ram的低256個字節(jié),地址出現(xiàn)在a0-a7的上時讀寫,用movx acc,@rx讀寫。這個比較特殊,而且c51好象有對此bug, 建議少用。但也有他的優(yōu)點,具體用法屬于中級問題,這里不提。
startup.a51的作用
和 匯編一樣,在c中定義的那些變量和數(shù)組的初始化就在startup.a51中進行,如果你在定義全局變量時帶有數(shù)值,如unsigned char data xxx=“100”,那startup.a51中就會有相關的賦值。如果沒有=100,startup.a51就會把他清0。(startup.a51 ==變量的初始化)。 這些初始化完畢后,還會設置sp指針。對非變量區(qū)域,如堆棧區(qū),將不會有賦值或清零動作。
有人喜歡改 startup.a51,為了滿足自己一些想當然的愛好,這是不必要的,有可能錯誤的。比如掉電保護的時候想保存一些變量, 但改startup.a51來實現(xiàn)是很笨的方法,實際只要利用非變量區(qū)域的特性,定義一個指針變量指向堆棧低部:0xff處就可實現(xiàn)。為什么還要去改? 可以這么說:任何時候都可以不需要改startup.a51,如果你明白它的特性。