找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

在keil編譯C8051F330 data為什么不夠?

查看數(shù): 2832 | 評論數(shù): 13 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時(shí)間: 2022-9-9 16:20

正文摘要:

C8051F330的資料顯示ram是256字節(jié)的,不知為何在寫到86以上總是data報(bào)溢出。不想改變Memory Model的設(shè)置,因?yàn)橛脁data編譯后的內(nèi)存接近8K了。

回復(fù)

ID:123289 發(fā)表于 2022-9-12 15:51
建議樓主再仔細(xì)閱讀CPU手冊,內(nèi)存分布。
其它不說,單說CPU的內(nèi)部256字節(jié)的RAM:
1、R0-R7占用(8個(gè))、輔助備用R0-R7占用(24個(gè))、位尋位占用(16個(gè)),堆棧用(與子程序嵌套層次有關(guān),函數(shù)結(jié)果傳遞有關(guān)),剩余可以自由使用。
2、如果用匯編寫程序,可以自己精確規(guī)劃這256個(gè)空間。
3、如果用C寫程序,則由編譯平臺幫你規(guī)劃處理,空浪費(fèi)大。平臺一般從30H-80H開始規(guī)劃,另外函數(shù)的返回結(jié)果也用堆棧傳遞,如果結(jié)果復(fù)雜、數(shù)據(jù)量大,很快就不夠用了。
樓上提議用IDATA、XDATA都對,但對樓主來說,最重要的,還是【仔細(xì)閱讀CPU手冊,弄清內(nèi)存分布!
ID:624769 發(fā)表于 2022-9-10 14:20
1,只要代碼不是匯編寫的,改idata基本就是幾秒鐘的事情,申明變量處,加idata字段即可,程序壓更不用動。 2,不管你換啥芯片,只要還是51核,終究只有128data,去掉通用寄存器要用的8-32個(gè)字節(jié),加上臨時(shí)擴(kuò)展變量要用的若干字節(jié),自己能隨意支配的data,說到底也就80多,了不起100出頭了。
ID:1044371 發(fā)表于 2022-9-10 10:24
qq624353765 發(fā)表于 2022-9-10 09:34
DATA只有128字節(jié),這128字節(jié)還要被單片機(jī)占用一部分,IDATA才是256字節(jié),DATA是IDATA前128字節(jié)

看來只能換芯片,要改在idata工作量太大,其中4K的程序是別人給我的。
ID:1044371 發(fā)表于 2022-9-10 10:22
dreamjack 發(fā)表于 2022-9-9 20:24
將部分?jǐn)?shù)組,變量前面,加上xdata,使變量實(shí)用外部RAM,不是占用內(nèi)部RAM

加在xdata里沒問題,但是占用太多空間了8K的flsah放不下,看來只能換芯片了。
ID:1044371 發(fā)表于 2022-9-10 10:19
188610329 發(fā)表于 2022-9-9 18:29
256ram中  data只有128,其中通用寄存器最少需要用8,實(shí)際能被你用的最多120,其他的ram必須用idata申明。

用到87就報(bào)警了,若要申明其他的數(shù)據(jù)在idata里,我放棄治療了,因?yàn)槠渲?K的程序是別人提供的。
ID:1044371 發(fā)表于 2022-9-10 10:16
coody_sz 發(fā)表于 2022-9-9 17:50
有數(shù)組的優(yōu)先放xdata

數(shù)組和變量我試過設(shè)定在xdata里,但是編譯后的占用內(nèi)存太多了,看來只能換芯片了。
ID:526108 發(fā)表于 2022-9-10 09:34
DATA只有128字節(jié),這128字節(jié)還要被單片機(jī)占用一部分,IDATA才是256字節(jié),DATA是IDATA前128字節(jié)
ID:1041851 發(fā)表于 2022-9-9 21:44
低128是data(可省略),高128字節(jié)和SFR地址相同,要加idata修飾
ID:1044371 發(fā)表于 2022-9-9 20:53
munuc_w 發(fā)表于 2022-9-9 17:00
DATA部分使用的太多了,這部分系統(tǒng)也要使用的,把數(shù)據(jù)移到PDATA里一部分就可以了。

我也想轉(zhuǎn)用一部分到xdata里去,但是轉(zhuǎn)過去的部分會占用800多字節(jié),這多出的字節(jié)剛好把我存取數(shù)據(jù)flash位置復(fù)用,我一但寫上數(shù)據(jù),就會覆蓋程序數(shù)據(jù)。
現(xiàn)在是搞不明白C8051F330里寫著有256個(gè)data可以用,就是系統(tǒng)占用一半,也應(yīng)該還有128的吧?但我實(shí)際編譯到87以上就報(bào)警。網(wǎng)上百度過但都是讓我換個(gè)大flash的芯片,就是想搞明白為何在用到87以上就報(bào)警。
ID:1044319 發(fā)表于 2022-9-9 20:24
將部分?jǐn)?shù)組,變量前面,加上xdata,使變量實(shí)用外部RAM,不是占用內(nèi)部RAM
ID:624769 發(fā)表于 2022-9-9 18:29
256ram中  data只有128,其中通用寄存器最少需要用8,實(shí)際能被你用的最多120,其他的ram必須用idata申明。
ID:1034262 發(fā)表于 2022-9-9 17:50
有數(shù)組的優(yōu)先放xdata
ID:752974 發(fā)表于 2022-9-9 17:00
DATA部分使用的太多了,這部分系統(tǒng)也要使用的,把數(shù)據(jù)移到PDATA里一部分就可以了。

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

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

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