標(biāo)題: 在keil編譯C8051F330 data為什么不夠? [打印本頁(yè)]

作者: 更換單片機(jī)ing    時(shí)間: 2022-9-9 16:20
標(biāo)題: 在keil編譯C8051F330 data為什么不夠?
C8051F330的資料顯示ram是256字節(jié)的,不知為何在寫(xiě)到86以上總是data報(bào)溢出。不想改變Memory Model的設(shè)置,因?yàn)橛脁data編譯后的內(nèi)存接近8K了。


作者: munuc_w    時(shí)間: 2022-9-9 17:00
DATA部分使用的太多了,這部分系統(tǒng)也要使用的,把數(shù)據(jù)移到PDATA里一部分就可以了。
作者: coody_sz    時(shí)間: 2022-9-9 17:50
有數(shù)組的優(yōu)先放xdata
作者: 188610329    時(shí)間: 2022-9-9 18:29
256ram中  data只有128,其中通用寄存器最少需要用8,實(shí)際能被你用的最多120,其他的ram必須用idata申明。
作者: dreamjack    時(shí)間: 2022-9-9 20:24
將部分?jǐn)?shù)組,變量前面,加上x(chóng)data,使變量實(shí)用外部RAM,不是占用內(nèi)部RAM

作者: 更換單片機(jī)ing    時(shí)間: 2022-9-9 20:53
munuc_w 發(fā)表于 2022-9-9 17:00
DATA部分使用的太多了,這部分系統(tǒng)也要使用的,把數(shù)據(jù)移到PDATA里一部分就可以了。

我也想轉(zhuǎn)用一部分到xdata里去,但是轉(zhuǎn)過(guò)去的部分會(huì)占用800多字節(jié),這多出的字節(jié)剛好把我存取數(shù)據(jù)flash位置復(fù)用,我一但寫(xiě)上數(shù)據(jù),就會(huì)覆蓋程序數(shù)據(jù)。
現(xiàn)在是搞不明白C8051F330里寫(xiě)著有256個(gè)data可以用,就是系統(tǒng)占用一半,也應(yīng)該還有128的吧?但我實(shí)際編譯到87以上就報(bào)警。網(wǎng)上百度過(guò)但都是讓我換個(gè)大flash的芯片,就是想搞明白為何在用到87以上就報(bào)警。
作者: littlespider    時(shí)間: 2022-9-9 21:44
低128是data(可省略),高128字節(jié)和SFR地址相同,要加idata修飾
作者: 624353765    時(shí)間: 2022-9-10 09:34
DATA只有128字節(jié),這128字節(jié)還要被單片機(jī)占用一部分,IDATA才是256字節(jié),DATA是IDATA前128字節(jié)
作者: 更換單片機(jī)ing    時(shí)間: 2022-9-10 10:16
coody_sz 發(fā)表于 2022-9-9 17:50
有數(shù)組的優(yōu)先放xdata

數(shù)組和變量我試過(guò)設(shè)定在xdata里,但是編譯后的占用內(nèi)存太多了,看來(lái)只能換芯片了。
作者: 更換單片機(jī)ing    時(shí)間: 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的程序是別人提供的。
作者: 更換單片機(jī)ing    時(shí)間: 2022-9-10 10:22
dreamjack 發(fā)表于 2022-9-9 20:24
將部分?jǐn)?shù)組,變量前面,加上x(chóng)data,使變量實(shí)用外部RAM,不是占用內(nèi)部RAM

加在xdata里沒(méi)問(wèn)題,但是占用太多空間了8K的flsah放不下,看來(lái)只能換芯片了。
作者: 更換單片機(jī)ing    時(shí)間: 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é)

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




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1