女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

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

單片機(jī)編程軟件是單片機(jī)開(kāi)發(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)為你寫(xiě)的延時(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)聚類(lè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)展開(kāi)。有一些小的循環(huán)體,在編譯時(shí)就能確定其循環(huán)次數(shù),編譯器會(huì)啟發(fā)式得試探是否將這個(gè)循環(huán)體復(fù)制展開(kāi),展開(kāi)循環(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)用的開(kāi)銷(xiā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

基于類(lèi)型的別名分析。多個(gè)指針指向同一塊內(nèi)存,可以互相稱(chēng)之為內(nèi)存的別名,因?yàn)檫@種情況會(huì)導(dǎo)致優(yōu)化變得很困難,因?yàn)榫幾g的時(shí)候不知道內(nèi)存是否存在。所以編譯器采用假設(shè)按照定義的類(lèi)型分配了內(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)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

為幫助大家更好使用單片機(jī)編程軟件,本文將對(duì)keil單片機(jī)編程軟件仿真、調(diào)劑技巧予以講解,并對(duì)該單片機(jī)編程軟件的常見(jiàn)錯(cuò)誤提示予以闡述。

關(guān)鍵字: 單片機(jī)編程軟件 指數(shù) keil

本文對(duì)于單片機(jī)編程軟件的介紹將基于如何采用keil單片機(jī)編程軟件調(diào)試stm32,如果你對(duì)單片機(jī)編程軟件抑或本文內(nèi)容具有興趣,不妨繼續(xù)往下閱讀哦。

關(guān)鍵字: 單片機(jī)編程軟件 指數(shù) keil

本文對(duì)于單片機(jī)編程軟件的介紹基于兩點(diǎn):1.keil單片機(jī)編程軟件編譯環(huán)境優(yōu)化等級(jí)說(shuō)明,2.keil單片機(jī)編程軟件中兩大概念名詞解析。

關(guān)鍵字: 單片機(jī)編程軟件 指數(shù) keil

為增加大家對(duì)單片機(jī)編程軟件的了解,本文將對(duì)keil單片機(jī)編程軟件予以介紹,主要在于介紹該單片機(jī)編程軟件的模式設(shè)置和一些編程事項(xiàng)。

關(guān)鍵字: keil 單片機(jī)編程軟件 指數(shù)

為幫助大家更快學(xué)會(huì)單片機(jī)編程軟件的使用,本文將對(duì)keil單片機(jī)編程軟件的使用方法加以介紹。如果你對(duì)本文內(nèi)容具有興趣,不妨繼續(xù)往下閱讀哦。

關(guān)鍵字: keil 單片機(jī)編程軟件 指數(shù)

本文對(duì)單片機(jī)編程軟件的介紹基于Keil,主要在于介紹keil單片機(jī)編程軟件如何將hex下載進(jìn)STM32,如何燒寫(xiě)hex文件以及如何直接使用二進(jìn)制數(shù)。

關(guān)鍵字: keil 單片機(jī)編程軟件 指數(shù)

為增進(jìn)大家對(duì)單片機(jī)編程軟件的認(rèn)識(shí),本文將對(duì)Keil單片機(jī)編程軟件相關(guān)內(nèi)容予以介紹,主要為Keil C51對(duì)標(biāo)準(zhǔn)ANSIC的擴(kuò)展的學(xué)習(xí)。如果你對(duì)本文內(nèi)容具有興趣,不妨繼續(xù)往下閱讀哦。

關(guān)鍵字: keil 單片機(jī)編程軟件 指數(shù)

本文中,將對(duì)Keil單片機(jī)編程軟件加以介紹,主要在于介紹如何在這款單片機(jī)編程軟件中進(jìn)行項(xiàng)目設(shè)置以及如何進(jìn)行編譯、鏈接。如果你對(duì)本文內(nèi)容具有興趣,不妨繼續(xù)往下閱讀哦。

關(guān)鍵字: keil 單片機(jī)編程軟件 指數(shù)

本文對(duì)于單片機(jī)編程軟件的講解將基于Keil,主要內(nèi)容在于闡述如何建立Keil工程。如果你對(duì)本文內(nèi)容具有興趣,不妨繼續(xù)往下閱讀哦。

關(guān)鍵字: keil 單片機(jī)編程軟件 指數(shù)

單片機(jī)編程軟件的使用頻率極高,采用單片機(jī)編程軟件,可制造諸多系統(tǒng)。對(duì)于單片機(jī)編程軟件,小編做過(guò)諸多介紹。本文對(duì)于單片機(jī)編程軟件的介紹基于Keil,主要在于介紹該單片機(jī)編程軟件是如何處理庫(kù)函數(shù)以及寄存器的關(guān)系的。

關(guān)鍵字: 單片機(jī)編程軟件 庫(kù)函數(shù) 指數(shù)
關(guān)閉