當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]我現(xiàn)對一個程序進(jìn)行減少片內(nèi)ram的使用的優(yōu)化,有一些效果,同時也產(chǎn)生了些疑問,在此向各位大蝦請教:一、現(xiàn)象:1、我在通過減少全局變量、函數(shù)內(nèi)變量的使用,減少函數(shù)間參數(shù)傳遞等手段來優(yōu)化,發(fā)現(xiàn)某些時候我減少一

我現(xiàn)對一個程序進(jìn)行減少片內(nèi)ram的使用的優(yōu)化,有一些效果,同時也產(chǎn)生了些疑問,在此向各位大蝦請教:
一、現(xiàn)象:
1、我在通過減少全局變量、函數(shù)內(nèi)變量的使用,減少函數(shù)間參數(shù)傳遞等手段來優(yōu)化,發(fā)現(xiàn)某些時候我減少一個變量的使用,keil編譯的結(jié)果就顯示data減少了一字節(jié),有時候這樣一直減少幾個變量的使用,data值一直都不會變,接著再減少變量的使用,又會一個一個的減少,到后來又不減少了。
2、我屏蔽程序中一些代碼之后編譯,顯示data反而是增加了。
二、疑問:
1、單片機(jī)程序運(yùn)行的時候,內(nèi)部ram是如果分配管理的,data值由哪些部分組成?
2、之前描述的兩個現(xiàn)象如何解釋?
3、data值是不包括堆??臻g的,那么程序運(yùn)行的堆??臻g大概需要多少,和哪些因素有關(guān),能不能預(yù)估?
4、單片機(jī)片內(nèi)ram的使用限度是多少?(指keil編譯出來的data值最好不要超過多少)

答:單片機(jī)內(nèi)程序運(yùn)行的時候ram空間是如何分配的
1、RAM的分配是與你選擇的編譯模式有關(guān),你可以看下編譯器的手冊,再打開最后產(chǎn)生的分配對照表仔細(xì)對照源程序,應(yīng)該可以找到規(guī)律。

2、仍然與編譯模式有關(guān),通常全局變量數(shù)量的變化可以立即反映在data段的長度上,但如果局部變量是指定用堆棧,就不一定會反映在data段的長度上了。

3、堆棧空間與你的RAM空間的分配有關(guān),這是在連接時確定的,在鏈接描述文件中指定的。

4、RAM的使用限度當(dāng)然跟你的單片機(jī)RAM的大小有關(guān)。

對不起,我對Keil的環(huán)境不熟,我不能幫你解釋具體到Keil上如何;上面講的是基本原理,每個C語言的環(huán)境都是這樣。

謝謝平常人!若有機(jī)會到廣佛一帶,我請你喝酒!
keil編譯模式我選擇的small:variables in data模式,大家一般也都應(yīng)該是這個模式吧。變量都是定義到data/idata區(qū)的。
keil編譯結(jié)果和編譯器本身有關(guān),就算是不同的編譯器,在內(nèi)存分配上是不是有共同遵從的方法呢?
或者您能不能介紹其他某個編譯器的內(nèi)存分配方式呢?


通常全局變量數(shù)量的變化可以立即反映在data段的長度上,但如果局部變量是指定用堆棧,就不一定會反映在data段的長度上了。
re:你的意思是局部變量占用的空間的使用還不一定包含到編譯結(jié)果里了?我編譯的結(jié)果是200多字節(jié)的data,由哪些組成?


ram使用限度跟單片機(jī)有關(guān),那好比我的單片機(jī)片內(nèi)ram是256的,那我使用的空間(也就是keil編譯出來的結(jié)果)的限度是多少,或者和哪些有關(guān)?也就是通常做法,我要留給堆棧多少空間?

另外再問一下:
同一個程序生成的bin文件和hex文件在大小上有什么關(guān)系?
聽說bin會是hex的一半?
這兩個文件在使用中有什么區(qū)別?

變量在內(nèi)存的分配方式
通常單片機(jī)的RAM區(qū)可以分成3類,短地址區(qū)、長地址區(qū)和外部地址區(qū)。

短地址區(qū)一般指00-FF之間可以用8位地址訪問的區(qū)域,長地址區(qū)一般指0100-FFFF之間必須用多于8位的地址訪問的區(qū)域,外部地址區(qū)指CPU外部總線訪問的區(qū)域,不同的區(qū)域有不同的指令尋址方式,例如:
MOV A, 40H ;訪問短地址區(qū)
MOV A, @DPTR ;訪問長地址區(qū)

一般的51中沒有外部地址區(qū)。

根據(jù)用途還劃分了一個堆棧區(qū)。

不同的存儲分配模式?jīng)Q定了全局變量是放在那個區(qū)域,訪問短地址區(qū)的指令可能比訪問長地址區(qū)的指令短且快,但長地址區(qū)可容納較多變量,尤其是較大的數(shù)組。

局部變量有兩種分配策略,一種是放在堆棧中,因?yàn)榫植孔兞恐辉谒诘暮瘮?shù)中有效,出了這個函數(shù)退棧就可以清理掉局部變量所占空間,空間可重復(fù)利用。這種策略下,減少局部變量的使用并反映不出內(nèi)存占用量的減少,因?yàn)閮?nèi)存的占用是動態(tài)的。

另一種策略是分析函數(shù)調(diào)用關(guān)系,把局部變量放在某段特定的內(nèi)存區(qū),如下例:
func1()
{
CHARc1, c2;
....
}

func2()
{
CHARx1, x2, x3;
...
}

main()
{
func1();
func2();
....
}

編譯器發(fā)現(xiàn)func1與func2沒有調(diào)用關(guān)系,就把c1與x1分配到同一個地址,c2與x2分配到同一個地址,x3分配到另一個地址;這樣處理可以比堆棧的方法得到較高的效率。當(dāng)你減掉c1時,并沒有減少內(nèi)存的總用量。

所以,堆棧的長度要看你程序的調(diào)用關(guān)系,局部變量的使用策略等因素,根據(jù)實(shí)際情況決定。

至于bin與hex文件的區(qū)別,我的理解bin是用二進(jìn)制的形式存放可執(zhí)行代碼,而hex文件使用ASCII形式存放可執(zhí)行代碼;如
0x12, 0x34, 0x56bin文件
1 2 3 4 5 6 hex文件

你說他們的大小是什么關(guān)系?

對不起,我只能講這么多了,再講就可以寫一本書了。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉