當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]單片機(jī)編程軟件是單片機(jī)開發(fā)不可缺少的工具之一,目前市場(chǎng)流通的單片機(jī)編程軟件主要為IAR單片機(jī)編程軟件和KEIL單片機(jī)編程軟件。本文中,將為大家講解IAR單片機(jī)編程軟件編譯優(yōu)化問(wèn)題,一起來(lái)了解下吧。

單片機(jī)編程軟件是單片機(jī)開發(fā)不可缺少的工具之一,目前市場(chǎng)流通的單片機(jī)編程軟件主要為IAR單片機(jī)編程軟件和KEIL單片機(jī)編程軟件。本文中,將為大家講解IAR單片機(jī)編程軟件編譯優(yōu)化問(wèn)題,一起來(lái)了解下吧。

一、編譯優(yōu)化選項(xiàng)

在iar中可以設(shè)置代碼的編譯優(yōu)化等級(jí),在工程名上右鍵選Options...,在彈框中選C/C++ Compiler--Optimizations,如下圖所示。

左邊的level里面是優(yōu)化等級(jí),右邊的是附加選項(xiàng)。如果不想往下看了又有bug體質(zhì),就把這里的level選到None上面,點(diǎn)擊OK。

二、優(yōu)化還是不優(yōu)化

優(yōu)化的目的簡(jiǎn)單來(lái)說(shuō)主要有兩個(gè),減少代碼量和提高程序運(yùn)行效率。隨之而來(lái)的是什么呢?如果編譯器誤認(rèn)為你寫的延時(shí)是“低效率”代碼,如果編譯器認(rèn)為某些變量的生命周期可以提前結(jié)束了,如果編譯器認(rèn)為某些變量你定義了沒(méi)有使用就是沒(méi)用,就會(huì)原地爆炸了。

所以還是有必要搞明白,優(yōu)化到底優(yōu)化了什么,才能決定要不要優(yōu)化。

三、IAR優(yōu)化了什么

1.None

有最好的debug支持,變量的生命周期會(huì)貫穿它的整個(gè)作用域,也就是說(shuō)編譯器不做任何優(yōu)化,只要是變量的作用域,這個(gè)變量就是有效的。

最直觀的的體現(xiàn)就是可以在live watch中查看該變量,如果它被優(yōu)化了,就查看不了了。

2.Low

仍然是具備調(diào)試支持的,優(yōu)化的是變量的生命周期,如果一個(gè)變量沒(méi)有作用了,后面不會(huì)用到它了,就會(huì)把它優(yōu)化掉,不讓它貫穿它的整個(gè)生命周期。

這有什么好處呢?這個(gè)變量不存在了,就意味著寄存器的壓力減小了很多,可以騰出更多空間給更有需要的變量。

3.Medium

除了上述優(yōu)化以外,還加入了很多新的優(yōu)化。

· Live-dead analysis and optimization

代碼是否可用的分析和優(yōu)化

· Dead code elimination

無(wú)用的代碼清除。

· Redundant label elimination

冗余標(biāo)簽消除

· Redundant branch elimination

冗余分支清除,所以可能出現(xiàn)由于對(duì)變量和分支的共同優(yōu)化,導(dǎo)致某些條件分支明明成立卻始終不會(huì)進(jìn)入,一個(gè)大坑。

· Code hoisting

代碼提升,很難理解的名字,其實(shí)就是它字面意思,就是把某些代碼(變量定義)提到作用域的頂部去,可笑的是定義的順序不變。也就是說(shuō),你定義了全局變量a=1,然后在某個(gè)函數(shù)里輸出a,在下面定義局部變量a=2,最后輸出的結(jié)果是亂碼或者0,這取決于局部變量的默認(rèn)初始化的值。在函數(shù)里真正被輸出的,不是全局變量的a,而是局部變量的a,但是這個(gè)a只做了定義,初始化還在原位置。

· Peephole optimization

窺孔優(yōu)化,通俗點(diǎn)說(shuō)是局部?jī)?yōu)化,編譯器對(duì)部分編譯的代碼,結(jié)合目標(biāo)CPU的指令特點(diǎn),做一些認(rèn)為可以提高性能的優(yōu)化。

· Some register content analysis and optimization

寄存器內(nèi)容分析與優(yōu)化

· Static clustering

靜態(tài)聚類。將在同一模塊內(nèi)定義的靜態(tài)變量和全局變量布置成使得在相同函數(shù)中訪問(wèn)的變量彼此緊密地存儲(chǔ)。這使得編譯器可以為多個(gè)訪問(wèn)使用相同的基指針。

· Common subexpression elimination

公共子表達(dá)式消去,在編程中會(huì)有很多地方使用相似的表達(dá)式,比如:

a=b+c+d;

e=b+c+f;

這個(gè)時(shí)候可以優(yōu)化成這樣:

tem=b+c;

a=tem+d;

e=tem+f;

4.High

最高程度的優(yōu)化。具備以上所有的優(yōu)化之外,還有:

· Instruction scheduling

指令調(diào)度,編譯器根據(jù)自己的指令調(diào)度器去重新安排指令,使得處理器運(yùn)行時(shí)出現(xiàn)的資源沖突情況更少,從而減少資源沖突引起的卡頓情況。

· Cross jumping

交叉跳躍

· Advanced register content analysis and optimization

高級(jí)寄存器內(nèi)容分析與優(yōu)化

· Loop unrolling

循環(huán)展開。有一些小的循環(huán)體,在編譯時(shí)就能確定其循環(huán)次數(shù),編譯器會(huì)啟發(fā)式得試探是否將這個(gè)循環(huán)體復(fù)制展開,展開循環(huán)體能減少程序的迭代次數(shù),從而加快程序的運(yùn)行速度,但會(huì)增加代碼的大小。

編譯器會(huì)從速度和代碼大小之間去找一個(gè)平衡點(diǎn),優(yōu)化速度和優(yōu)化代碼大小那個(gè)配置就會(huì)影響這個(gè)優(yōu)化。

· Function inlining

函數(shù)內(nèi)聯(lián)

如果一個(gè)比較小的函數(shù)在編譯時(shí)已經(jīng)能確定其準(zhǔn)確的定義了,編譯器會(huì)決定將其內(nèi)聯(lián)到調(diào)用者的內(nèi)部,這樣就會(huì)減小函數(shù)調(diào)用的開銷。

· Code motion

代碼移動(dòng)。對(duì)循環(huán)不變的表達(dá)式和公共子表達(dá)式進(jìn)行移動(dòng),避免其被再次評(píng)估。這個(gè)優(yōu)化會(huì)減小程序代碼體積,加快執(zhí)行速度。

· Type-based alias analysis

基于類型的別名分析。多個(gè)指針指向同一塊內(nèi)存,可以互相稱之為內(nèi)存的別名,因?yàn)檫@種情況會(huì)導(dǎo)致優(yōu)化變得很困難,因?yàn)榫幾g的時(shí)候不知道內(nèi)存是否存在。所以編譯器采用假設(shè)按照定義的類型分配了內(nèi)存去編譯優(yōu)化。

說(shuō)明:上面有些優(yōu)化,可以在iar中配置是否要使用。

高級(jí)別的優(yōu)化選項(xiàng)回增加代碼編譯的時(shí)間,并且會(huì)在調(diào)試的時(shí)候出現(xiàn)一些困難,比如有時(shí)候想在某個(gè)位置打斷點(diǎn)卻發(fā)現(xiàn)打不上,因?yàn)槟抢锏拇a已經(jīng)被優(yōu)化掉了,有時(shí)候想看某些變量的值,卻發(fā)現(xiàn)live watch顯示這個(gè)變量無(wú)法查看,也是被優(yōu)化掉了。

以上便是小編此次帶來(lái)的“單片機(jī)編程軟件”相關(guān)內(nèi)容,希望大家喜歡。

本站聲明: 本文章由作者或相關(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)系本站刪除。
換一批
延伸閱讀

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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