找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 18975|回復(fù): 14
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)data,code,xdata的區(qū)別和使用

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:404797 發(fā)表于 2019-4-20 22:42 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
      剛學(xué)單片機(jī)的時(shí)候,很多人往往不在意數(shù)據(jù)是放在哪個(gè)段,使用很隨意。但是,隨著學(xué)習(xí)的深入,用單片機(jī)處理的事務(wù)越來越復(fù)雜,程序越來越長(zhǎng),有時(shí)不能不注意數(shù)據(jù)放在哪啦,是要好好規(guī)劃的,如果還不注意或不知道怎么規(guī)劃內(nèi)存使用,很可能遇到內(nèi)存不夠的問題,不會(huì)解決的話項(xiàng)目還做不下去,所以一些內(nèi)存基本知識(shí)還是有必要掌握,在此本人談一些簡(jiǎn)單的認(rèn)識(shí)。
     1、data段,這是基本的數(shù)據(jù)段,在程序中我們定義的變量,如int x;等語句,這樣定義的變量都存放在數(shù)據(jù)段data中,使用簡(jiǎn)單,但是有一個(gè)缺點(diǎn),就是數(shù)量太少,一般的單片機(jī)只有128個(gè)字節(jié),超過128個(gè)字節(jié),編譯程序報(bào)錯(cuò),不編譯。如果碰到數(shù)據(jù)段溢出的情況,可以把變量安排在其它段,如果不知道怎么安排到其他段,有可能程序再也編不下去,工作就此止步。
    2、code段,這是代碼段,一般的程序代碼放在這個(gè)段,當(dāng)然,如果數(shù)據(jù)段不夠用,也可以將變量放在這段,方法是定義變量時(shí)加個(gè)code,如:char code x;加這個(gè)關(guān)鍵字后,將把變量安排在代碼段中存放,由于代碼段有64K,一般情況,安排幾百字節(jié)的內(nèi)存用于保存變量,不影響程序編寫,所以代碼段是解決數(shù)據(jù)段不夠的有效方法。
    3、xdata擴(kuò)展數(shù)據(jù)段,這種段要有擴(kuò)展內(nèi)存才能使用,有些CPU本身內(nèi)置了這種內(nèi)存如stc89c52rc等,有這種內(nèi)存的CPU可以把變量安排在這種段內(nèi),方法是加xdata,如char xdata x;這樣就把內(nèi)存定義在擴(kuò)展數(shù)據(jù)段中,如果CPU內(nèi)置擴(kuò)展內(nèi)存的就建議把xdata段用起來,以減輕data段的壓力。
     以上是本人對(duì)三個(gè)段的簡(jiǎn)單認(rèn)識(shí),不知有沒有錯(cuò)誤,如有,歡迎在此討論,以增進(jìn)對(duì)內(nèi)存的認(rèn)識(shí)。

評(píng)分

參與人數(shù) 2黑幣 +62 收起 理由
YJGG + 12 贊一個(gè)!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

6#
ID:235200 發(fā)表于 2020-2-12 16:25 | 只看該作者
定義變量前不能加code,因?yàn)椴荒芨淖?只能是常量才能這樣定義,另外還有一個(gè)idata區(qū)域沒有提到
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

8#
ID:155507 發(fā)表于 2020-2-18 21:07 | 只看該作者
另外還有個(gè)idata, pdata, bdata區(qū)域沒有提到

     data     --->     可尋址片內(nèi)ram
     bdata   --->     可位尋址的片內(nèi)ram
     idata    --->     可尋址片內(nèi)ram,允許訪問全部?jī)?nèi)部ram
     pdata   --->     分頁(yè)尋址片外ram (MOVX @R0) (256 BYTE/頁(yè))
     xdata   --->     可尋址片外ram (64k 地址范圍FFFFH)
     code    --->     程序存儲(chǔ)區(qū) (64k 地址范圍),對(duì)應(yīng)MOVC @DPTR

回復(fù)

使用道具 舉報(bào)

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

     data     --->     可尋址片內(nèi)ram

這些用的好少
回復(fù)

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

11#
ID:624769 發(fā)表于 2021-9-11 16:55 | 只看該作者
2、code段,這是代碼段,一般的程序代碼放在這個(gè)段,當(dāng)然,如果數(shù)據(jù)段不夠用,也可以將變量放在這段,方法是定義變量時(shí)加個(gè)code,如:char code x;加這個(gè)關(guān)鍵字后,將把變量安排在代碼段中存放,由于代碼段有64K,一般情況,安排幾百字節(jié)的內(nèi)存用于保存變量,不影響程序編寫,所以代碼段是解決數(shù)據(jù)段不夠的有效方法。

這個(gè)不對(duì),  code 聲明的 是 常量  不是 變量。

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表