|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請(qǐng)問各路大蝦,單片機(jī)片內(nèi)ram不夠用,怎么辦? |
| 作者:alphal 欄目:單片機(jī) |
我現(xiàn)在有兩個(gè)程序需要合并,每個(gè)程序片內(nèi)ram的使用都是160字節(jié)以上,毫無疑問,合起來ram肯定會(huì)爆。 希望各位給點(diǎn)建議,可以從哪些方面入手來減少ram的使用。如果把變量定義放到片外是否可行,有什么要注意的? ps:我們使用77e58的片子。 另外,很納悶,那個(gè)程序keil編譯結(jié)果顯示code超過32k,77e58code大小也只有32k,可是燒片子居然,沒事,程序還照樣跑。 看來77e58果然超強(qiáng)! |
| 2樓: | >>參與討論 |
| 作者: jhycl 于 2006/9/4 11:01:00 發(fā)布:
小心,程序雖然運(yùn)行了,不知什么時(shí)候會(huì)出亂子 |
|
| 3樓: | >>參與討論 |
| 作者: gyt 于 2006/9/4 11:13:00 發(fā)布:
對(duì) 樓上說得對(duì) |
|
| 4樓: | >>參與討論 |
| 作者: gyt 于 2006/9/4 11:14:00 發(fā)布:
變量定義放到片外, 應(yīng)該可行。 |
|
| 5樓: | >>參與討論 |
| 作者: liukejj 于 2006/9/4 11:21:00 發(fā)布:
外擴(kuò) 外擴(kuò)ram可以撒?沒用過這個(gè)芯片 |
|
| 6樓: | >>參與討論 |
| 作者: jhycl 于 2006/9/4 11:23:00 發(fā)布:
外擴(kuò)個(gè)62256,把一些對(duì)讀寫時(shí)間要求不嚴(yán)格的可以定義到片外 |
|
| 7樓: | >>參與討論 |
| 作者: alphal 于 2006/9/4 11:33:00 發(fā)布:
除了外擴(kuò)就沒其他的招嗎? 77E58本身就有1K的片外ram,不需要外擴(kuò),問題是變量定義到片外會(huì)有什么影響沒有,除了訪問時(shí)間長一點(diǎn)。 超過32K的code是怎么燒進(jìn)32K的rom的?奇怪 |
|
| 8樓: | >>參與討論 |
| 作者: xwj 于 2006/9/4 11:58:00 發(fā)布:
明顯是設(shè)計(jì)問題 |
|
| 9樓: | >>參與討論 |
| 作者: alphal 于 2006/9/4 12:30:00 發(fā)布:
暈了,哪里明顯是設(shè)計(jì)問題? |
|
| 10樓: | >>參與討論 |
| 作者: HWM 于 2006/9/4 12:48:00 發(fā)布:
超出的內(nèi)容還未執(zhí)行到 超出的內(nèi)容還未執(zhí)行到,如果一旦執(zhí)行到未寫入的程序就會(huì)出問題了。 |
|
| 11樓: | >>參與討論 |
| 作者: alphal 于 2006/9/4 14:09:00 發(fā)布:
恩,超出的事情就不再說了。看RAM怎么省省吧 |
|
| 12樓: | >>參與討論 |
| 作者: xplore 于 2006/9/4 14:35:00 發(fā)布:
變量 |
|
| 13樓: | >>參與討論 |
| 作者: xplore 于 2006/9/4 14:40:00 發(fā)布:
變量定義 變量定義用 xdata,就可以用片外ram了 , 但這樣會(huì)影響速度,這基本上沒關(guān)系,除非時(shí)間有特別苛刻的要求, 另外會(huì)是代碼空間變大, 你這種情況就比較嚴(yán)重了. 用51代碼超出32KB的話不小了, 設(shè)法優(yōu)化一下 編譯器用最高級(jí)優(yōu)化 , keil 一般是9級(jí) |
|
| 14樓: | >>參與討論 |
| 作者: jinggx 于 2006/9/4 16:08:00 發(fā)布:
RE: 簡單一點(diǎn),好好優(yōu)化一程序,RAM或許夠用。 延復(fù)雜一點(diǎn),外擴(kuò)RAM。 |
|
| 15樓: | >>參與討論 |
| 作者: alphal 于 2006/9/4 17:07:00 發(fā)布:
keil的優(yōu)化對(duì)code很有效,但ram一點(diǎn)沒減少 大家有什么招可以節(jié)省片內(nèi)ram。 (定義到片外不算招) |
|
| 16樓: | >>參與討論 |
| 作者: STMCUChina 于 2006/9/4 18:09:00 發(fā)布:
真正有效節(jié)省RAM的辦法是修改你的算法 一般用編譯器的優(yōu)化是不能節(jié)省RAM的,因?yàn)镽AM的使用是程序決定的,常用的辦法是: 1)減小變量的長度;如不必要用到16位的變量時(shí)改用8位的,不必要用到32位的變量時(shí)改用16位的,尤其是在數(shù)組的使用上。 2)減少全局變量的使用,因?yàn)榫植孔兞繀^(qū)域是復(fù)用的。 3)減少函數(shù)的參數(shù)傳遞,這可以同時(shí)減少代碼的長度。 4)。。。。 |
|
| 17樓: | >>參與討論 |
| 作者: alphal 于 2006/9/4 18:15:00 發(fā)布:
謝謝STMCUChina同志!! |
|
| 18樓: | >>參與討論 |
| 作者: gyt 于 2006/9/4 20:24:00 發(fā)布:
減少全局變量的使用 這個(gè)說的很對(duì) |
|
| 19樓: | >>參與討論 |
| 作者: alphal 于 2006/9/5 11:03:00 發(fā)布:
還有其他的辦法呢? 一宿沒頂就落到后頁了,可是我的問題還沒有答完呢。。。。 |
|
| 20樓: | >>參與討論 |
| 作者: alphal 于 2006/9/5 12:46:00 發(fā)布:
關(guān)注。。。。 |
|
|
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |