熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2022-9-9 16:20
正文摘要:C8051F330的資料顯示ram是256字節(jié)的,不知為何在寫到86以上總是data報(bào)溢出。不想改變Memory Model的設(shè)置,因?yàn)橛脁data編譯后的內(nèi)存接近8K了。 |
建議樓主再仔細(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)存分布! |
1,只要代碼不是匯編寫的,改idata基本就是幾秒鐘的事情,申明變量處,加idata字段即可,程序壓更不用動。 2,不管你換啥芯片,只要還是51核,終究只有128data,去掉通用寄存器要用的8-32個(gè)字節(jié),加上臨時(shí)擴(kuò)展變量要用的若干字節(jié),自己能隨意支配的data,說到底也就80多,了不起100出頭了。 |
qq624353765 發(fā)表于 2022-9-10 09:34 看來只能換芯片,要改在idata工作量太大,其中4K的程序是別人給我的。 |
dreamjack 發(fā)表于 2022-9-9 20:24 加在xdata里沒問題,但是占用太多空間了8K的flsah放不下,看來只能換芯片了。 |
188610329 發(fā)表于 2022-9-9 18:29 用到87就報(bào)警了,若要申明其他的數(shù)據(jù)在idata里,我放棄治療了,因?yàn)槠渲?K的程序是別人提供的。 |
coody_sz 發(fā)表于 2022-9-9 17:50 數(shù)組和變量我試過設(shè)定在xdata里,但是編譯后的占用內(nèi)存太多了,看來只能換芯片了。 |
DATA只有128字節(jié),這128字節(jié)還要被單片機(jī)占用一部分,IDATA才是256字節(jié),DATA是IDATA前128字節(jié) |
低128是data(可省略),高128字節(jié)和SFR地址相同,要加idata修飾 |
munuc_w 發(fā)表于 2022-9-9 17:00 我也想轉(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)警。 |
將部分?jǐn)?shù)組,變量前面,加上xdata,使變量實(shí)用外部RAM,不是占用內(nèi)部RAM |
256ram中 data只有128,其中通用寄存器最少需要用8,實(shí)際能被你用的最多120,其他的ram必須用idata申明。 |
有數(shù)組的優(yōu)先放xdata |
DATA部分使用的太多了,這部分系統(tǒng)也要使用的,把數(shù)據(jù)移到PDATA里一部分就可以了。 |
Powered by 單片機(jī)教程網(wǎng)