0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何正確使用MDK-ARM優(yōu)化功能, 以及優(yōu)化之后帶來的影響

黃工的嵌入式技術(shù)圈 ? 來源:黃工的嵌入式技術(shù)圈 ? 作者:黃工的嵌入式技術(shù) ? 2020-02-28 15:17 ? 次閱讀

許多朋友使用MDK-ARM很長時間,卻不知它的優(yōu)化選項到底該有什么用,或者說到底該如何使用。 本文圍繞MDK-ARM優(yōu)化選項,以及相關(guān)拓展知識(微庫、實(shí)際應(yīng)用、調(diào)試)進(jìn)行講述,希望對你今后開發(fā)項目有所幫助。

1總述

我們所指的優(yōu)化,主要兩方面:

代碼大?。⊿ize)

代碼性能(運(yùn)行時間)

在MDK-ARM中,優(yōu)化相關(guān)的配置選項:

當(dāng)然,如果選擇編譯器(AC5、AC6)不同,優(yōu)化選項也有差異(下面講述)。 舉例:某些項目MCU容量有限時,你除了修改代碼(優(yōu)化開支),同時你有必要使用優(yōu)化選項。 某些項目(比如某算法)需要高效(最短時間)運(yùn)行,此時有必要使用優(yōu)化選項。

2優(yōu)化選項說明

本節(jié)詳細(xì)講述優(yōu)化相關(guān)選項,同時,編譯器選擇AC5和AC6時有差異,下面也會針對AC5和6分別講述。

1.Use Cross-Module Optimization:使用跨模塊優(yōu)化使用跨模塊優(yōu)化可以啟用鏈接器反饋文件(進(jìn)行兩次編譯),從而允許進(jìn)一步的代碼優(yōu)化。

提示:A.不針對庫目標(biāo)執(zhí)行跨模塊優(yōu)化。 B.跨模塊優(yōu)化將增加構(gòu)建項目所需的時間,因為會自動執(zhí)行多個編譯和鏈接步驟。 2.Use MicroLIB:使用微庫它是ISO標(biāo)準(zhǔn)C運(yùn)行時庫的子集(其中一部分),提供了性能和代碼大小之間的權(quán)衡。 微庫并不完全兼容ANSI,但對于大多數(shù)小型嵌入式應(yīng)用程序來說已經(jīng)足夠了。 3.Use Link-Time Code Generation:使用鏈接時代碼生成(優(yōu)化)在V5版本之前有這個優(yōu)化選項,多文件編譯,鏈接時進(jìn)行優(yōu)化:

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

刪除未引用的變量和函數(shù)

通過重新排列變量優(yōu)化內(nèi)存訪問

在可能的情況下重用內(nèi)存


4.Execute-only Code:生成只執(zhí)行的代碼不包含未使用(函數(shù)、變量等)代碼段。 僅限于:

C、Thumb代碼

基于Cortex-M3、M4的處理器

編譯器5.04以上

5.Optimize for Time:優(yōu)化時間以更大的代碼大小為代價,減少執(zhí)行時間。比如:使用內(nèi)聯(lián)函數(shù)。 編譯器為AC6時,此選項為【Link-Time Optimization】,在鏈接狀態(tài)下執(zhí)行模塊間優(yōu)化。 6.Split Load and Store Multiple:分割加載和多存儲指示編譯器將LDM和STM指令拆分為兩個或多個LDM或STM指令,以減少延遲,此選項可以提高系統(tǒng)的總體性能。 7.The One ELF Section per Function:每個函數(shù)一個ELF段ELF代碼段通常包含許多函數(shù)的代碼,此選項告訴編譯器將所有函數(shù)放入它們自己的ELF段,這允許鏈接器刪除未使用的ELF段(而不是未使用的函數(shù))。

8.AC5時:Optimization優(yōu)化選項:默認(rèn)值,以優(yōu)化性能為主。 Level 0 (-O0):關(guān)閉大部分優(yōu)化,除了一些簡單的轉(zhuǎn)換,生成的代碼具有最佳的調(diào)試視圖。 Level 1 (-O1):應(yīng)用受限優(yōu)化。 比如:刪除未使用的內(nèi)聯(lián)函數(shù)和靜態(tài)函數(shù),刪除冗余代碼和重新排序指令等。生成的代碼經(jīng)過合理優(yōu)化,具有良好的調(diào)試視圖。 Level 2 (-O2):高度優(yōu)化,目標(biāo)代碼到源代碼的映射并不一定對應(yīng),因此,不利于調(diào)試。 Level 3 (-O3):最大級別優(yōu)化,級別3與時間優(yōu)化相結(jié)合可能生成比級別2更多的代碼。 9.AC6時:Optimization優(yōu)化選項當(dāng)編譯器選擇AC6時,優(yōu)化選項有差異(有更多優(yōu)化選項):

AC6優(yōu)化選型中前面5項(default、-O0 ~ 3)和AC5的作用基本一樣,但AC6多了三個選項。 -Ofast:啟用-O3的所有優(yōu)化,以及其他可能違反語言標(biāo)準(zhǔn)(嚴(yán)格遵守)的優(yōu)化。 -Os balanced:平衡代碼大小與代碼速度。默認(rèn)情況下,編譯器執(zhí)行優(yōu)化以提高性能,但可能會增加image文件大小。 -Oz image size:優(yōu)化代碼大小。

3如何優(yōu)化?

本節(jié)講述三種編譯優(yōu)化,使其達(dá)到最優(yōu)(代碼最小、性能最好)

代碼大小

代碼性能(速度)

代碼平衡(大小和速度)

1.優(yōu)化代碼大小針對AC5編譯器:

Use MicroLIB

Use Cross-module optimization

Optimization:level 2 (-O2)

針對AC6編譯器:

Use MicroLIB

Optimization:-Oz image size

說明:A.代碼量大(ELF代碼段通常包含許多函數(shù)的代碼),可考慮使用The One ELF Section per Function選項減小代碼。 B.AC6編譯器改進(jìn)了優(yōu)化功能(可以理解為增加的3個選項集成了優(yōu)化功能)。 代碼優(yōu)化大?。▽Ρ龋?/p>

2.優(yōu)化代碼性能針對AC5編譯器:

Use Cross-module optimization

Optimization:level 3 (-O3)

Optimize for Time

針對AC6編譯器:

Optimization:-Ofast

Link-Time Optimization

代碼優(yōu)化性能(對比):

3.代碼平衡這種情況下,在滿足代碼大小的同時,我們應(yīng)盡量滿足性能。 這里其實(shí)就是一個相關(guān)平衡的關(guān)系,結(jié)合上面兩種優(yōu)化方式根據(jù)自己實(shí)際情況出發(fā),一般優(yōu)化考慮如下配置。 針對AC5編譯器:

Use Cross-module optimization

Optimization:level 3 (-O3)

Optimize for Time

針對AC6編譯器:

Optimization:-Os balanced

Link-Time Optimization

當(dāng)然,AC6中-Os balanced優(yōu)化選項更智能。

4拓展說明

MDK-ARM的優(yōu)化功能需要結(jié)合項目實(shí)際情況進(jìn)行優(yōu)化。對一些項目能起到很大幫助作用,但優(yōu)化之后也可能帶來一些影響。

1.使用高度優(yōu)化(-O1以上),可能會影響Debug調(diào)試(因為優(yōu)化之后,編譯輸出和實(shí)際代碼不匹配)。

2.指定源文件/文件組優(yōu)化

有些代碼不需要優(yōu)化,我們優(yōu)化指定的源文件/文件組就行。

推薦閱讀:Keil系列教程

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    8966

    瀏覽量

    365017
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67765
  • MDK
    MDK
    +關(guān)注

    關(guān)注

    4

    文章

    207

    瀏覽量

    31920
收藏 人收藏

    評論

    相關(guān)推薦

    TI Arm內(nèi)核三角函數(shù)的優(yōu)化

    電子發(fā)燒友網(wǎng)站提供《TI Arm內(nèi)核三角函數(shù)的優(yōu)化.pdf》資料免費(fèi)下載
    發(fā)表于 09-11 09:19 ?0次下載
    TI <b class='flag-5'>Arm</b>內(nèi)核三角函數(shù)的<b class='flag-5'>優(yōu)化</b>

    keil軟件實(shí)現(xiàn)編程仿真需要哪些步驟

    Keil MDK-ARM 是一款廣泛使用的集成開發(fā)環(huán)境(IDE),專為 ARM Cortex-M 微控制器編程而設(shè)計。它提供了代碼編輯、編譯、鏈接、調(diào)試和仿真等功能。 1. 安裝 Keil
    的頭像 發(fā)表于 09-02 10:28 ?284次閱讀

    keil5怎么利用sys進(jìn)行配置ti環(huán)境

    以下是一些關(guān)鍵步驟和建議: 安裝Keil MDK-ARM: 首先,您需要從Keil官方網(wǎng)站下載并安裝Keil MDK-ARM。這是一個集成開發(fā)環(huán)境(IDE),專為ARM Cortex-M微控制器
    的頭像 發(fā)表于 09-02 10:19 ?254次閱讀

    keil5怎么給ti燒錄程序

    安裝Keil MDK-ARM軟件: 訪問Keil官方網(wǎng)站(https://www.keil.com/)并下載Keil MDK-ARM軟件。 安裝軟件并激活您的許可證。 創(chuàng)建新項目: 打開Keil
    的頭像 發(fā)表于 09-02 10:18 ?256次閱讀

    keil5怎么把程序燒到板子上

    安裝Keil MDK-ARM: 從Keil官網(wǎng)下載Keil MDK-ARM安裝包。 按照安裝向?qū)瓿砂惭b。 連接開發(fā)板: 將開發(fā)板通過USB或其他接口連接到計算機(jī)。 配置開發(fā)環(huán)境: 打開Keil
    的頭像 發(fā)表于 08-22 09:30 ?501次閱讀

    優(yōu)化 FPGA HLS 設(shè)計

    ,可以通過使用 FPGA 工具設(shè)置優(yōu)化設(shè)計本身來最大限度地減少性能損失。 高效找到正確的FPGA工具設(shè)置 盡管設(shè)計人員知道 FPGA 工具設(shè)置的存在,但這些設(shè)置往往沒有
    發(fā)表于 08-16 19:56

    Arm宣布專為移動游戲設(shè)計的圖形優(yōu)化方案

    Arm 近期宣布了其專為移動游戲設(shè)計的圖形優(yōu)化方案——Arm Accuracy Super Resolution(ASR),旨在顯著提升游戲畫面的視覺品質(zhì),同時有效控制智能手機(jī)的功耗。這一創(chuàng)新
    的頭像 發(fā)表于 07-12 15:58 ?243次閱讀

    OpenHarmony之開機(jī)優(yōu)化

    PNG或PDF)的圖形報表,以便用戶進(jìn)行深入分析。 功能與用途 分析系統(tǒng)啟動時間和啟動過程中資源的使用情況。 發(fā)現(xiàn)可能影響系統(tǒng)啟動速度的因素,如某些進(jìn)程啟動緩慢或占用過多資源等。 對系統(tǒng)進(jìn)行優(yōu)化,提高
    發(fā)表于 07-01 16:39

    Arm推出AI優(yōu)化Arm終端CSS以及新的Arm Kleidi軟件

    Arm 終端計算子系統(tǒng) (CSS) 作為新的計算解決方案,結(jié)合了 Armv9 架構(gòu)的優(yōu)勢,以及基于三納米工藝節(jié)點(diǎn),經(jīng)過驗證和證實(shí)為生產(chǎn)就緒的新 Arm CPU 和 GPU 實(shí)現(xiàn),可賦能芯片合作伙伴快速創(chuàng)新,
    的頭像 發(fā)表于 05-30 11:33 ?479次閱讀
    <b class='flag-5'>Arm</b>推出AI<b class='flag-5'>優(yōu)化</b>的<b class='flag-5'>Arm</b>終端CSS<b class='flag-5'>以及</b>新的<b class='flag-5'>Arm</b> Kleidi軟件

    stm32cubemx生成mdk-arm v4項目文件無法打開是什么原因?qū)е碌模?/a>

    stm32cubemx 生成mdk-arm v4 項目文件無法打開
    發(fā)表于 05-14 06:43

    如何在Keil MDK-ARM環(huán)境下開發(fā)STM32L011K4T6?

    在Keil MDK-ARM環(huán)境下開發(fā)STM32L011K4T6
    發(fā)表于 04-22 06:49

    Keil MDK優(yōu)化選項說明

    最近,看到群里的小伙伴在討論【我的代碼不按照流程執(zhí)行】相關(guān)的話題。這類問題,有經(jīng)驗的工程師肯定能想到是什么原因?qū)е碌?,那就是編譯器把你代碼優(yōu)化了。
    的頭像 發(fā)表于 11-20 10:21 ?4848次閱讀
    Keil <b class='flag-5'>MDK</b><b class='flag-5'>優(yōu)化</b>選項說明

    MDK中的不同優(yōu)化等級有什么區(qū)別?

    什么時候該使用什么優(yōu)化等級
    發(fā)表于 11-01 07:50

    MDK中怎么設(shè)置不同的優(yōu)化等級大???

    MDK中怎么設(shè)置不同的優(yōu)化等級大小
    發(fā)表于 10-12 08:08

    MDK編譯代碼為什么不能使用最高的優(yōu)化等級?

    MDK編譯代碼為什么不能使用最高的優(yōu)化等級
    發(fā)表于 10-09 09:08