|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請問KEIL里存儲模式compact與small模式編譯結(jié)果有不同嗎? |
| 作者:alphal 欄目:單片機 |
我們這個程序有30多K ,使用的是WB77E58,在XDATA區(qū)定義的變量空間大概有4K,開始的時候momery MODEL 選擇small沒有問題,后來我加了一個字節(jié)的變量,就顯示錯誤,地址空間溢出,該momery MODEL 模式選擇為compact模式后就ok了。 可是我不知道這樣編譯出的代碼是否可用,這兩個模式編譯出的代碼在哪兒會有不同? 這兩個模式在編譯的時候有什么不同? 謝謝! |
| 2樓: | >>參與討論 |
| 作者: alphal 于 2006/1/16 20:10:00 發(fā)布:
沒人知道? |
|
| 3樓: | >>參與討論 |
| 作者: computer00 于 2006/1/16 20:21:00 發(fā)布:
放心用吧,只要編譯通過,就可以用的(當(dāng)然你的程序和器件要正確 |
|
| 4樓: | >>參與討論 |
| 作者: alphal 于 2006/1/17 22:44:00 發(fā)布:
呵呵,謝謝00同志,但是我還是想明白這兩個會有什么不同 |
|
| 5樓: | >>參與討論 |
| 作者: computer00 于 2006/1/17 23:28:00 發(fā)布:
你試試將某些data區(qū)的變量,改成pdata或xdata試試。 應(yīng)該是內(nèi)部data區(qū)的數(shù)據(jù)用光了。如果你選擇compact的話,就會將臨時變量分配在pdata區(qū),這樣就可以編譯通過了。 但這樣會降低程序運行的速度,因為訪問變量時要通過MOVX指令間接尋址。 你可以將幾個對速度影響不大的變量,聲明為pdata或xdata,使用small模式應(yīng)該就可以編譯通過了。 順便問下,你的系統(tǒng)應(yīng)該擴展了外部RAM吧?77E58內(nèi)部只有1K XRAM。 |
|
| 6樓: | >>參與討論 |
| 作者: alphal 于 2006/1/18 17:17:00 發(fā)布:
to00:系統(tǒng)擴展了64M的外部RAM, 系統(tǒng)擴展了64M的外部RAM(DS1270),定義的外部變量占到了3-4K的空間, 開始的時候是使用的small模式編譯沒有問題,后來定義了一個指向外部RAM空間的指針變量,編譯就出現(xiàn)“地址空間溢出”的錯誤。 將MEMORY MODEL改為compact模式后就通過了,那是不是如果定義了指向外部空間的指針就得使用compact模式? 謝謝00。 |
|
| 7樓: | >>參與討論 |
| 作者: computer00 于 2006/1/18 19:19:00 發(fā)布:
不是的,因為你的內(nèi)部RAM用光了,所以會報警。 “定義了指向外部空間的指針”,那是因為雖然指針指向的是外部RAM,但存儲這個地址的那個變量,還是被放在內(nèi)部RAM中的。 可以將這個變量加xdata來修飾,把存儲地址的變量,放在外部RAM中。如: unsigned CHAR xdata * xdata p; 或者,將部分(至少2個字節(jié))其它原來聲明在內(nèi)部RAM中的變量,改到XRAM中。 例如,原來有unsigned CHAR x,y; 改成 unsigned CHAR xdata x,y; 一句話:就是減少內(nèi)部256字節(jié)RAM的使用,將部分放到XRAM中。 另外,我擔(dān)心你的堆?赡軙粔蛴玫模@么大的程序量,并且內(nèi)部RAM都被使用光了。 所以,應(yīng)該要將一些原來沒有加xdata的變量,加上xdata修飾,以減少內(nèi)部RAM的使用, 留給堆棧使用。 * - 本貼最后修改時間:2006-1-18 19:24:27 修改者:computer00 |
|
| 8樓: | >>參與討論 |
| 作者: qinxg 于 2006/1/19 16:33:00 發(fā)布:
顯然是data(低128字節(jié))溢出了 把一些全局變量定義成idata即可.idata=data+高128字節(jié),keil會自己分配的. 一定用small模式,這樣局部變量都在低128字節(jié)里,速度最快! 把變量分類: 常用的用idata定義,不常用的用xdata定義 |
|
| 9樓: | >>參與討論 |
| 作者: RobertJ 于 2006/1/27 9:04:00 發(fā)布:
只是執(zhí)行時間稍有不同罷了 可以將高頻率使用的變量定在bdata,idata,data,使用頻率不高的定在xdata |
|
| 10樓: | >>參與討論 |
| 作者: northerns 于 2006/2/5 18:42:00 發(fā)布:
冒個泡泡 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |