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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 18881|回復: 14
打印 上一主題 下一主題
收起左側

單片機data,code,xdata的區別和使用

  [復制鏈接]
跳轉到指定樓層
樓主
ID:404797 發表于 2019-4-20 22:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
      剛學單片機的時候,很多人往往不在意數據是放在哪個段,使用很隨意。但是,隨著學習的深入,用單片機處理的事務越來越復雜,程序越來越長,有時不能不注意數據放在哪啦,是要好好規劃的,如果還不注意或不知道怎么規劃內存使用,很可能遇到內存不夠的問題,不會解決的話項目還做不下去,所以一些內存基本知識還是有必要掌握,在此本人談一些簡單的認識。
     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段的壓力。
     以上是本人對三個段的簡單認識,不知有沒有錯誤,如有,歡迎在此討論,以增進對內存的認識。

評分

參與人數 2黑幣 +62 收起 理由
YJGG + 12 贊一個!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂2 踩
回復

使用道具 舉報

沙發
ID:284488 發表于 2019-4-21 11:56 | 只看該作者
讚!感謝分享。
回復

使用道具 舉報

板凳
ID:314000 發表于 2019-4-22 01:10 | 只看該作者
謝謝分享
回復

使用道具 舉報

地板
ID:249062 發表于 2019-4-22 12:59 | 只看該作者
感謝分享
回復

使用道具 舉報

5#
ID:433166 發表于 2020-2-12 10:08 | 只看該作者
文中有部分BUG:     
code 指定數據是存儲在代碼區,數據是在編程的時候跟代碼一起寫入代碼存儲器,運行過程中不能改變!
code的作用是告訴單片機,我定義的數據要放在ROM(程序存儲區)里面,寫入后就不能再更改,其實是相當與匯編里面的尋址MOVC
回復

使用道具 舉報

6#
ID:235200 發表于 2020-2-12 16:25 | 只看該作者
定義變量前不能加code,因為不能改變,只能是常量才能這樣定義,另外還有一個idata區域沒有提到
回復

使用道具 舉報

7#
ID:691127 發表于 2020-2-18 15:19 | 只看該作者
讚!感謝分享。
回復

使用道具 舉報

8#
ID:155507 發表于 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

回復

使用道具 舉報

9#
ID:893480 發表于 2021-9-10 14:33 | 只看該作者
angmall 發表于 2020-2-18 21:07
另外還有個idata, pdata, bdata區域沒有提到

     data     --->     可尋址片內ram

這些用的好少
回復

使用道具 舉報

10#
ID:917199 發表于 2021-9-10 20:19 | 只看該作者

而且是教科書式的定義,固然非常正確,對我這菜鳥具體使用卻幫助不大
回復

使用道具 舉報

11#
ID:624769 發表于 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位指針,不是好很多么?
回復

使用道具 舉報

12#
ID:115923 發表于 2021-9-15 15:42 | 只看該作者
data  就是128的RAM,掉電會丟失,
code就是ROM, 掉電不丟失,
xdata 擴展的RAM,  掉電會丟失,
回復

使用道具 舉報

13#
ID:875095 發表于 2021-9-15 23:05 | 只看該作者
CODE 段,不是變量,只能保存常量;放在這里的數據不能夠被改變。
回復

使用道具 舉報

14#
ID:875095 發表于 2021-9-15 23:45 | 只看該作者
可以直接或者間接尋址的 idata 128byte(00H-7FH); 只能間接尋址的idata 128 byte(80H~FFH); 擴展的xdata 理論最大可以有64K,如果擴展的話。
回復

使用道具 舉報

15#
ID:969161 發表于 2021-11-13 17:32 | 只看該作者
這個貼子討論的好,希望能更深入一些。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美mv日韩mv国产网站91进入 | 中文字幕精品一区二区三区在线 | 国产有码 | 激情国产 | 成人免费视频观看视频 | 91免费视频 | 成人在线视频免费看 | 成人精品在线观看 | 日韩av免费在线观看 | 欧美天堂 | 在线精品亚洲欧美日韩国产 | 国产视频一区二区 | 欧美美女一区二区 | 手机在线观看av | 亚洲免费在线 | 热久久久久| 国产成人精品午夜 | 日韩中出| 黄色国产视频 | 免费国产一区 | 91婷婷韩国欧美一区二区 | 欧美啊v在线观看 | 色综合av| 午夜精品一区二区三区在线观看 | 2022国产精品 | 免费在线观看av网址 | 国产成人高清成人av片在线看 | 国产激情视频在线观看 | 日韩视频在线一区二区 | 少妇一级淫片免费播放 | 国产一级电影在线观看 | 免费观看一级特黄欧美大片 | 一区二区视频在线观看 | 毛片一区 | 久久久91精品国产一区二区三区 | 成人在线免费av | 国产1区| 日韩精品免费视频 | 国产视频福利 | 国产一区二区在线免费观看 | 午夜电影网址 |