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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機C語言xdata應該怎么怎么正確使用?

[復制鏈接]
跳轉到指定樓層
樓主
最近用單片機C語言編程感覺data消耗的比較快,就想著嘗試使用xdata。畢竟xdata比data空間大太多了,不用放著也浪費。但是剛開始時會出現莫名其妙的問題,比如變量值初始化時就不對了,或者更改菜單再切換回來值也不對(一般是浮點數出問題)。后來把內部變量都用static 修飾,倒是正常了,但還有點不放心。keil5設置默認值沒動。想請教的是:

1、256字節的data值,一般建議最大占用到多少?

2、xdata使用時要注意什么?所有函數內部變量都要static 修飾嗎?

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

使用道具 舉報

沙發
ID:883242 發表于 2022-12-22 23:34 | 只看該作者
1)data屬性的變量最多只有120字節。也就是低128字節,減去至少一個register bank 8字節,如果你用到了using關鍵字使用了其他的bank,那么使用一個再減去8字節。

2)ram空間高128字節必須聲明為idata才可以訪問,同時要留足堆棧空間,堆棧的最大使用量是(程序調用最大嵌套層數+中斷調用最大嵌套層數)x2。

3)xdata要比data慢得多,其他沒有限制,如果你加了static解決了問題,那么不加static是不是xdata都會有問題。
回復

使用道具 舉報

板凳
ID:1044091 發表于 2022-12-23 10:53 | 只看該作者
Hephaestus 發表于 2022-12-22 23:34
1)data屬性的變量最多只有120字節。也就是低128字節,減去至少一個register bank 8字節,如果你用到了usin ...

又增加了幾個變量,應該是開始報RAM溢出了。前輩的解答太及時了!

還有一個問題,xdata要比data慢得多,這個說法我也總看到,但是究竟慢多少,有沒有可以量化的數值?或者怎么直觀的感受到?什么樣的變量適合放在xdata中呢?


*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   DATA   
    SEGMENT: ?DT?SHAN
    LENGTH:  0060H
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
    SYMBOL:  FF1
    SEGMENT: ?DT?SHAN
下面還有很多 ERROR L105
回復

使用道具 舉報

地板
ID:1034262 發表于 2022-12-23 11:00 | 只看該作者
C51編譯后data不超過200不用太擔心,但是超過200就要留意+小心,不要導致堆棧溢出。
xdata沒有什么要注意的,我也不用加static,定義時指定為xdata即可,用了超過20年,沒約到過問題。
回復

使用道具 舉報

5#
ID:814525 發表于 2022-12-23 16:05 | 只看該作者
xdata沒有什么要注意的,不用加static。只是定義之后,xdata變量的初始值是隨機的,初始化清零就沒什么問題。
回復

使用道具 舉報

6#
ID:161164 發表于 2022-12-23 17:45 | 只看該作者
ningsy 發表于 2022-12-23 10:53
又增加了幾個變量,應該是開始報RAM溢出了。前輩的解答太及時了!

還有一個問題,xdata要比data慢得多 ...

可以由仿真看到差多少下面的代碼中,
Delay250us()是由STC-ISP生成的延時
Delay250usX()是把其中的變量改為xdata

上圖中箭咀所指的是運行Delay250us()前的步數(628)


上圖中箭咀所指的是運行Delay250us()后的步數(878)
878-628=250步


上圖中箭咀所指的是運行Delay250usX()后的步數(1986)
1986-878=1108步
1108/250=4.432倍

從而得知xdata比普通data大約慢4.4倍

評分

參與人數 1黑幣 +5 收起 理由
angmall + 5 贊一個!

查看全部評分

回復

使用道具 舉報

7#
ID:401564 發表于 2022-12-23 21:06 | 只看該作者
程序如果沒有什么問題,就不要去折騰這些,XDATA多就多咯,難不成單片機有64K的內存,你就要寫完嗎?
如果是基于學習的目的,那就去學匯編,尋址方式不一樣,占用的時間也不一樣,不同的C代碼產生的差別是不一樣的,沒法有一個絕對的公式給你
程序中頻繁調用的,頻繁參與運算的,就用原有的那點RAM
其它的不是頻繁用的,就放在XDATA就行了,比如GPS模塊的數據,動不動就是上百個字節的數據,但有的模塊是0.5S才發送一次數據
回復

使用道具 舉報

8#
ID:1044091 發表于 2022-12-23 23:02 來自觸屏版 | 只看該作者
lkc8210 發表于 2022-12-23 17:45
可以由仿真看到差多少下面的代碼中,
Delay250us()是由STC-ISP生成的延時
Delay250usX()是把其中的變量 ...

了解了,非常感謝!
回復

使用道具 舉報

9#
ID:1044091 發表于 2022-12-23 23:21 來自觸屏版 | 只看該作者
Y_G_G 發表于 2022-12-23 21:06
程序如果沒有什么問題,就不要去折騰這些,XDATA多就多咯,難不成單片機有64K的內存,你就要寫完嗎?
如果是基 ...

是因為在做一款泵控制器,大概進度一半多,發現已經占用100多字節data空間了,所以拓展變量空間已經成了很急迫的事情。
回復

使用道具 舉報

10#
ID:879348 發表于 2022-12-24 08:47 | 只看該作者
在C語言里直接用啊,除了速度比data慢,其他都是一樣用
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品电影网在线观看 | 亚洲第一色站 | 老头搡老女人毛片视频在线看 | 黄色小视频大全 | 欧美日韩国产在线观看 | 欧美精品在线观看 | 在线国产小视频 | 日韩在线免费视频 | 久久精品1 | 一级毛片色一级 | 亚洲色视频 | 欧一区 | 日本精品久久久一区二区三区 | 国产不卡在线观看 | av中文字幕网 | 久干网 | 国产成人综合久久 | 久久久久精| 国产精品一区二区av | 国产成人免费视频网站高清观看视频 | 女朋友的闺蜜3韩国三级 | 免费观看一级毛片视频 | av成年人网站 | 午夜亚洲 | 在线毛片网 | 欧美国产亚洲一区二区 | 成人免费xxxxx在线视频 | 婷婷精品 | 欧美淫片| 亚洲综合大片69999 | 国产一区二区三区久久久久久久久 | 亚洲国产一区二区在线 | 成人小视频在线观看 | 亚洲精品区 | 国产激情精品一区二区三区 | 久久剧场 | 色综合久久久久 | 狠狠ri| 国产精品综合视频 | 天堂av资源| 免费小视频在线观看 |