久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 單片機data,code,xdata的區別和使用 [打印本頁]

作者: zxwdown    時間: 2019-4-20 22:42
標題: 單片機data,code,xdata的區別和使用
      剛學單片機的時候,很多人往往不在意數據是放在哪個段,使用很隨意。但是,隨著學習的深入,用單片機處理的事務越來越復雜,程序越來越長,有時不能不注意數據放在哪啦,是要好好規劃的,如果還不注意或不知道怎么規劃內存使用,很可能遇到內存不夠的問題,不會解決的話項目還做不下去,所以一些內存基本知識還是有必要掌握,在此本人談一些簡單的認識。
     1、data段,這是基本的數據段,在程序中我們定義的變量,如int x;等語句,這樣定義的變量都存放在數據段data中,使用簡單,但是有一個缺點,就是數量太少,一般的單片機只有128個字節,超過128個字節,編譯程序報錯,不編譯。如果碰到數據段溢出的情況,可以把變量安排在其它段,如果不知道怎么安排到其他段,有可能程序再也編不下去,工作就此止步。
    2、code段,這是代碼段,一般的程序代碼放在這個段,當然,如果數據段不夠用,也可以將變量放在這段,方法是定義變量時加個code,如:char code x;加這個關鍵字后,將把變量安排在代碼段中存放,由于代碼段有64K,一般情況,安排幾百字節的內存用于保存變量,不影響程序編寫,所以代碼段是解決數據段不夠的有效方法。
    3、xdata擴展數據段,這種段要有擴展內存才能使用,有些CPU本身內置了這種內存如stc89c52rc等,有這種內存的CPU可以把變量安排在這種段內,方法是加xdata,如char xdata x;這樣就把內存定義在擴展數據段中,如果CPU內置擴展內存的就建議把xdata段用起來,以減輕data段的壓力。
     以上是本人對三個段的簡單認識,不知有沒有錯誤,如有,歡迎在此討論,以增進對內存的認識。

作者: lon7085    時間: 2019-4-21 11:56
讚!感謝分享。
作者: 55955156    時間: 2019-4-22 01:10
謝謝分享
作者: diexue74110    時間: 2019-4-22 12:59
感謝分享
作者: liu888888    時間: 2020-2-12 10:08
文中有部分BUG:     
code 指定數據是存儲在代碼區,數據是在編程的時候跟代碼一起寫入代碼存儲器,運行過程中不能改變!
code的作用是告訴單片機,我定義的數據要放在ROM(程序存儲區)里面,寫入后就不能再更改,其實是相當與匯編里面的尋址MOVC
作者: csmyldl    時間: 2020-2-12 16:25
定義變量前不能加code,因為不能改變,只能是常量才能這樣定義,另外還有一個idata區域沒有提到
作者: xianglin21    時間: 2020-2-18 15:19
讚!感謝分享。
作者: angmall    時間: 2020-2-18 21:07
另外還有個idata, pdata, bdata區域沒有提到

     data     --->     可尋址片內ram
     bdata   --->     可位尋址的片內ram
     idata    --->     可尋址片內ram,允許訪問全部內部ram
     pdata   --->     分頁尋址片外ram (MOVX @R0) (256 BYTE/頁)
     xdata   --->     可尋址片外ram (64k 地址范圍FFFFH)
     code    --->     程序存儲區 (64k 地址范圍),對應MOVC @DPTR


作者: ibigDane    時間: 2021-9-10 14:33
angmall 發表于 2020-2-18 21:07
另外還有個idata, pdata, bdata區域沒有提到

     data     --->     可尋址片內ram

這些用的好少
作者: timerzero    時間: 2021-9-10 20:19
ibigDane 發表于 2021-9-10 14:33
這些用的好少

而且是教科書式的定義,固然非常正確,對我這菜鳥具體使用卻幫助不大
作者: 188610329    時間: 2021-9-11 16:55
2、code段,這是代碼段,一般的程序代碼放在這個段,當然,如果數據段不夠用,也可以將變量放在這段,方法是定義變量時加個code,如:char code x;加這個關鍵字后,將把變量安排在代碼段中存放,由于代碼段有64K,一般情況,安排幾百字節的內存用于保存變量,不影響程序編寫,所以代碼段是解決數據段不夠的有效方法。

這個不對,  code 聲明的 是 常量  不是 變量。

另外, idata 這么重要的一個,你居然漏了,你用DATA 只能定義 0~0x7f , 后面的 0x80~0xff 不用太浪費了吧? 同時,BDATA 這個也很常用吧,定義一個變量在 位尋址地址,然后 sbit 每一個位,就可以方便的對位操作,需要的時候 可以 字節操作把 整個8位都清零,或者都置1。 另外, Pdata, 用8位指針操作 Xdata, 在 DPTR 比較緊張的程序里,把部分指針操作交給 8位指針,不是好很多么?

作者: zhaobolove    時間: 2021-9-15 15:42
data  就是128的RAM,掉電會丟失,
code就是ROM, 掉電不丟失,
xdata 擴展的RAM,  掉電會丟失,
作者: hondephy@126.co    時間: 2021-9-15 23:05
CODE 段,不是變量,只能保存常量;放在這里的數據不能夠被改變。
作者: hondephy@126.co    時間: 2021-9-15 23:45
可以直接或者間接尋址的 idata 128byte(00H-7FH); 只能間接尋址的idata 128 byte(80H~FFH); 擴展的xdata 理論最大可以有64K,如果擴展的話。
作者: harbour374859    時間: 2021-11-13 17:32
這個貼子討論的好,希望能更深入一些。




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美一级免费看 | 伊人精品一区二区三区 | 国产精品国产精品 | 亚州视频在线 | 国产欧美一区二区三区在线看 | 亚洲视频三区 | 日韩中文字幕一区二区 | 久久1区| 精品国产31久久久久久 | 超碰在线97国产 | 波多野结衣精品在线 | 精品久久久久久国产 | 中文字幕免费视频 | 亚洲欧美一区二区三区1000 | 久久一及片 | 亚洲成人在线视频播放 | 国产一区二区三区精品久久久 | 精品一区二区三区在线观看国产 | 亚洲a视频| 超碰8| 精品一级电影 | 国产亚洲成av人在线观看导航 | 一级片子 | 国产一区二区三区视频 | 亚洲天堂久久 | 欧美一区二区在线看 | 天堂久久av | 国产不卡在线播放 | 欧美一区二区三区 | 日韩aⅴ视频| 欧美一区2区三区4区公司 | a级在线观看 | 亚洲国产小视频 | 精品小视频 | 中文字幕日韩欧美 | 日韩国产在线观看 | 亚洲一区影院 | 欧美综合一区二区 | 情侣酒店偷拍一区二区在线播放 | 成人免费在线视频 | 中文字幕电影在线观看 |