国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
keil上ADDRESS SPACE OVERFLOW了
http://www.crystalradio.cn/thread-455621-1-1.html
2013
如何解決keil 編譯錯(cuò)誤:address space overflow


A1:
是的,變量太多了。。。

如果51的話,把一些變量改成idata試試,尤其是大的數(shù)組。 因?yàn)?56B的RAM中,有128在idata,有些STC的型號(hào)全部RAM都在idata定義的區(qū)域。




A2:

如果沒(méi)有外部ram就只能用small

small,臨時(shí)變量分配在data或idata區(qū)
compact,臨時(shí)變量分配在pdata區(qū)
large,臨時(shí)變量分配在xdata區(qū)

如果沒(méi)有外部ram就只能用small...


緣由: 
一段讀卡器的程序,生成的hex文件有點(diǎn)大,看到其中的有些處理其實(shí)不需要,
就想去掉
    switch(g_cCommand)
              {
                     case 0x0101:
                        ComSetBound();               break;
              /*下面的處理不需要,注釋
                     case 0x0104:
                        ComGetHardModel();           break;
               */
                     case 0x0108:
                 ..................
              }
結(jié)果link出現(xiàn)這樣的錯(cuò)誤:    
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   DATA    
    SEGMENT: ?DT?PCDHALT?ISO14443A
    LENGTH:  0044H
Program Size: data=261.5 xdata=0 code=10089
Target not created

而不改動(dòng)那段代碼,則complied,link成功:
Program Size: data=193.5 xdata=0 code=10099
creating hex file from "T5310"...

問(wèn)題:
1,為什么注釋掉那一段case就出這種錯(cuò)誤呢?
2,為什么注釋掉那一段case顯示的data使用量這么大呢?

回復(fù):因?yàn)橛泻瘮?shù)沒(méi)有調(diào)用,所以軟件沒(méi)辦法分析調(diào)用關(guān)系

因而也就沒(méi)辦法使用內(nèi)存覆蓋技術(shù)來(lái)分配臨時(shí)變量,從而內(nèi)存不足.

如果你不要那個(gè)函數(shù)的話,連那個(gè)函數(shù)也注釋掉。

-------
晚上調(diào)程序的時(shí)候,KEIL編譯出現(xiàn)了ADDRESS SPACE OBERFLOW的問(wèn)題,已經(jīng)碰到兩次了,上次沒(méi)在意,以為程序太長(zhǎng),地址空間溢出了。
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   DATA    
    SEGMENT: _DATA_GROUP_
    LENGTH:  005DH
剛才百度了一下,看到一個(gè)網(wǎng)友在博客里面的文章,成功解決,原來(lái)不是data空間溢出的問(wèn)題,而是我有些子程序定義了沒(méi)調(diào)用,導(dǎo)致keil無(wú)法合理分配空間,從而溢出。



為了讓這篇文章繼續(xù)發(fā)揮光和熱,原文轉(zhuǎn)載如下:(非常十分以及及其感謝網(wǎng)友zoedigi?。?/div>
  
樓上的ddxixi的意見(jiàn)有誤。首先,我說(shuō)了我不能任意使用外部存貯空間,所以決不能讓編譯器將一些臨時(shí)變量放入idata or xdata。
其次,data 空間可以達(dá)到256,見(jiàn)頂樓的第三例,data空間使用了197.4而決無(wú)錯(cuò)誤。這是因?yàn)槟壳笆忻嫔洗蠖鄶?shù)的MCU都提供了256的data空間。
那么我的錯(cuò)誤出現(xiàn)在哪里呢?
這就是Keil的問(wèn)題了。當(dāng)編譯失敗時(shí),它不能給出完整正確的報(bào)告。所以它給出的:
Program Size: data=126.3 xdata=582 code=12091
就是不可信的。實(shí)際上我的data空間已經(jīng)遠(yuǎn)不止126.3了。
最后找到,我在多處定義了一個(gè)char buf[33];的字符串,而沒(méi)有使用它。
結(jié)論就出來(lái)了:
1、Keil的錯(cuò)誤報(bào)告不完整。
2、在Keil里最好不要留下定義而未使用的變量或函數(shù),編譯器無(wú)法合理的為之分配空間,而導(dǎo)致空間溢出。


A4
因?yàn)槭窃趯懸院笠玫膸?kù)函數(shù),有很多沒(méi)有用到的函數(shù)。
現(xiàn)在找到一個(gè)解決辦法,提示有哪個(gè)函數(shù)是UNCALLED的就在主函數(shù)里CALL之而不是在庫(kù)文件里一個(gè)個(gè)注釋掉,看起來(lái)體積更大了,實(shí)際上反而能編譯成功。
以后寫具體程序時(shí)再進(jìn)行裁剪




A5
原理上貌似也不難理解。因?yàn)橛?jì)算機(jī)上的C編譯器也默認(rèn)不會(huì)刪除沒(méi)有被調(diào)用過(guò)的函數(shù)。當(dāng)然視具體設(shè)置而定了,在某些設(shè)置下未被調(diào)用的函數(shù)可能像KEIL里一樣引起警告。

印象中有時(shí)即使開(kāi)啟針對(duì)體積的優(yōu)化那些死函數(shù)也不會(huì)被刪除。好像是為保證語(yǔ)義正確什么的,一些看起來(lái)很明顯的優(yōu)化編譯器即使開(kāi)啟優(yōu)化選項(xiàng)也不會(huì)做,因?yàn)閮?yōu)化后可能導(dǎo)致難以發(fā)現(xiàn)的隱藏bug。這樣說(shuō)來(lái)keil因?yàn)閡ncalled函數(shù)警告也沒(méi)有什么,重點(diǎn)在于它不能有效處理這些未調(diào)用的函數(shù)(也許還是自己keil設(shè)置的問(wèn)題~~~)
本人所做電路一概沒(méi)有套件?。?!
 
A6 發(fā)表于 2013-9-29 21:35:04 |只看該作者

發(fā)現(xiàn)了更好的解決辦法,在project—option for target \'target 1\'里面的target標(biāo)簽頁(yè)里memory model里選擇large **** xdata,這樣子編譯時(shí)能通過(guò),但是仿真用AT89C51和AT89C52的模型都不行,實(shí)際燒寫后運(yùn)行正常,哎
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服