日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

局部變量有兩種分配策略,一種是放在堆棧中,因?yàn)榫植孔兞恐辉谒诘暮瘮?shù)中有效,出了這個(gè)函數(shù)退棧就可以清理掉局部變量所占空間,空間可重復(fù)利用。這種策略下,減少局部變量的使用并反映不出內(nèi)存占用量的減少,因?yàn)閮?nèi)存的占用是動(dòng)態(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沒(méi)有調(diào)用關(guān)系,就把c1與x1分配到同一個(gè)地址,c2與x2分配到同一個(gè)地址,x3分配到另一個(gè)地址;這樣處理可以比堆棧的方法得到較高的效率。當(dāng)你減掉c1時(shí),并沒(méi)有減少內(nèi)存的總用量。

所以,堆棧的長(zhǎng)度要看你程序的調(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文件

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

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


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

8位單片機(jī)在嵌入式設(shè)計(jì)領(lǐng)域已經(jīng)成為半個(gè)多世紀(jì)以來(lái)的主流選擇。盡管嵌入式系統(tǒng)市場(chǎng)日益復(fù)雜,8位單片機(jī)依然不斷發(fā)展,積極應(yīng)對(duì)新的挑戰(zhàn)和系統(tǒng)需求。如今,Microchip推出的8位PIC?和AVR?單片機(jī)系列,配備了先進(jìn)的獨(dú)立...

關(guān)鍵字: 單片機(jī) 嵌入式 CPU

在嵌入式系統(tǒng)開(kāi)發(fā)中,程序燒錄是連接軟件設(shè)計(jì)與硬件實(shí)現(xiàn)的關(guān)鍵環(huán)節(jié)。當(dāng)前主流的單片機(jī)燒錄技術(shù)已形成ICP(在電路編程)、ISP(在系統(tǒng)編程)、IAP(在應(yīng)用編程)三大技術(shù)體系,分別對(duì)應(yīng)開(kāi)發(fā)調(diào)試、量產(chǎn)燒錄、遠(yuǎn)程升級(jí)等不同場(chǎng)景。...

關(guān)鍵字: 單片機(jī) ISP ICP IAP 嵌入式系統(tǒng)開(kāi)發(fā)

在嵌入式系統(tǒng)開(kāi)發(fā)中,看門狗(Watchdog Timer, WDT)是保障系統(tǒng)可靠性的核心組件,其初始化時(shí)機(jī)的選擇直接影響系統(tǒng)抗干擾能力和穩(wěn)定性。本文從硬件架構(gòu)、軟件流程、安全規(guī)范三個(gè)維度,系統(tǒng)分析看門狗初始化的最佳實(shí)踐...

關(guān)鍵字: 單片機(jī) 看門狗 嵌入式系統(tǒng)

本文中,小編將對(duì)單片機(jī)予以介紹,如果你想對(duì)它的詳細(xì)情況有所認(rèn)識(shí),或者想要增進(jìn)對(duì)它的了解程度,不妨請(qǐng)看以下內(nèi)容哦。

關(guān)鍵字: 單片機(jī) 開(kāi)發(fā)板 Keil

隨著單片機(jī)系統(tǒng)越來(lái)越廣泛地應(yīng)用于消費(fèi)類電子、醫(yī)療、工業(yè)自動(dòng)化、智能化儀器儀表、航空航天等各領(lǐng)域,單片機(jī)系統(tǒng)面臨著電磁干擾(EMI)日益嚴(yán)重的威脅。電磁兼容性(EMC)包含系統(tǒng)的發(fā)射和敏感度兩方面的問(wèn)題。

關(guān)鍵字: 單片機(jī) 電磁兼容

以下內(nèi)容中,小編將對(duì)單片機(jī)的相關(guān)內(nèi)容進(jìn)行著重介紹和闡述,希望本文能幫您增進(jìn)對(duì)單片機(jī)的了解,和小編一起來(lái)看看吧。

關(guān)鍵字: 單片機(jī) 復(fù)位電路

在這篇文章中,小編將為大家?guī)?lái)單片機(jī)的相關(guān)報(bào)道。如果你對(duì)本文即將要講解的內(nèi)容存在一定興趣,不妨繼續(xù)往下閱讀哦。

關(guān)鍵字: 單片機(jī) 異常復(fù)位

今天,小編將在這篇文章中為大家?guī)?lái)單片機(jī)的有關(guān)報(bào)道,通過(guò)閱讀這篇文章,大家可以對(duì)它具備清晰的認(rèn)識(shí),主要內(nèi)容如下。

關(guān)鍵字: 單片機(jī) 仿真器

單片機(jī)將是下述內(nèi)容的主要介紹對(duì)象,通過(guò)這篇文章,小編希望大家可以對(duì)它的相關(guān)情況以及信息有所認(rèn)識(shí)和了解,詳細(xì)內(nèi)容如下。

關(guān)鍵字: 單片機(jī) 中斷 boot

一直以來(lái),單片機(jī)都是大家的關(guān)注焦點(diǎn)之一。因此針對(duì)大家的興趣點(diǎn)所在,小編將為大家?guī)?lái)單片機(jī)的相關(guān)介紹,詳細(xì)內(nèi)容請(qǐng)看下文。

關(guān)鍵字: 單片機(jī) 數(shù)字信號(hào) 模擬信號(hào)
關(guān)閉