欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
問大家c51定義a為idata改成data程序運行和正常不一樣,什么原因?
[打印本頁]
作者:
jimjassdf
時間:
2018-6-29 22:51
標題:
問大家c51定義a為idata改成data程序運行和正常不一樣,什么原因?
本帖最后由 jimjassdf 于 2018-6-30 12:02 編輯
問大家c51定義int idata a改成int a程序編譯不出錯,運行和正常不一樣,什么原因?謝謝
作者:
deity0750
時間:
2018-12-19 15:13
人個經驗:不建議使用idata,idata會使用SFR特殊功能寄存器0x80H~0xFF,因為這塊通常用于中斷與函數調用的堆棧,程序處理不好的話會有沖突,導致程序異常。
Keil C51 語言中的關鍵字,代表了 RAM 不同區域的劃分
data:片內 RAM 從 0x00~0x7F
idata:片內 RAM 從 0x00~0xFF
pdata:片外 RAM 從 0x00~0xFF
xdata:片外 RAM 從 0x0000~0xFFFF
在 Keil 默認設置下, data 是可以省略的,即什么都不加的時候變量就是定義到 data 區域中的。
data 區域 RAM 的訪問在匯編語言中用的是直接尋址,執行速度是最快的。如果你定義成 idata,不僅僅可以訪問 data 區域,還可以訪問 0x80H~0xFF 的范圍,但加了 idata 關鍵字后,訪問的時候 51 單片機用的是通用寄存器間接尋址,速度較 data會慢一些。
而且我們平時大多數情況下不太希望訪問到 0x80H~0xFF,因為這塊通常用于中斷與函數調用的堆棧, 所以在絕大多數情況下,我們使用內部 RAM 的時候,只用 data 就可以了。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1