您好◕✘│☁,歡迎進入上海湧迪工業自動化有限公司網站▩•☁↟!
一鍵分享網站到✘↟╃:
您現在的位置✘↟╃:首頁 >> 新聞動態 >> 6RA80直流調速器淺析嵌入式程式設計中的最佳化
6RA80直流調速器淺析嵌入式程式設計中的最佳化
瀏覽次數✘↟╃:60釋出日期✘↟╃:2022-06-25
   直流調速器在數控機床▩·↟◕、造紙印刷▩·↟◕、紡織印染▩·↟◕、光纜線纜裝置▩·↟◕、包裝機械▩·↟◕、電工機械▩·↟◕、食品加工機械▩·↟◕、橡膠機械▩·↟◕、生物裝置▩·↟◕、印製電路板裝置▩·↟◕、實驗裝置▩·↟◕、焊接切割▩·↟◕、輕工機械▩·↟◕、物流輸送裝置▩·↟◕、機車車輛▩·↟◕、醫裝置▩·↟◕、通訊裝置▩·↟◕、雷達裝置▩·↟◕、衛星地面接受系統等行業廣泛應用✘↟。
  直流調速器淺析嵌入式程式設計中的最佳化✘↟╃:
  嵌入式系統由於受功耗▩·↟◕、成本和體積等因素的制約◕✘│☁,嵌入式微處理器的處理能力與桌面系統處理器相比也存在較大差距◕✘│☁,故嵌入式系統對程式執行的空間和時間要求更為苛刻✘↟。通常◕✘│☁,需要對嵌入式應用程式進行效能最佳化◕✘│☁,以滿足嵌入式應用的效能需求✘↟。
  1 嵌入式程式最佳化的型別
  嵌入式應用程式最佳化◕✘│☁,指在不改變程式功能的情況下◕✘│☁,透過修改原來程式的演算法▩·↟◕、結構◕✘│☁,並利用軟體開發工具對程式進行改進◕✘│☁,使修改後的程式執行速度更高或程式碼尺寸更小✘↟。
  按照最佳化的側重點不同◕✘│☁,程式最佳化可分為執行速度最佳化和程式碼尺寸最佳化✘↟。執行速度最佳化是指在充分掌握軟硬體特性的基礎上◕✘│☁,透過應用程式結構調整等手段來縮短完成定任務所需的執行時間;程式碼尺寸最佳化則是指應用程式在能夠正確實現所需功能的前提下◕✘│☁,儘可能減小程式的程式碼量✘↟。實際應用中◕✘│☁,這兩者往往是相互矛盾的◕✘│☁,為了提高程式執行速度◕✘│☁,就要以增加程式碼量為代價;而為了減小程式程式碼尺寸◕✘│☁,可能又要以降低程式執行速度為代價✘↟。因此◕✘│☁,在對程式進行最佳化之前◕✘│☁,應根據實際需要來制定具體的最佳化策略✘↟。隨著計算機和微電子技術的不斷髮展◕✘│☁,儲存空間已不再是制約嵌入式系統的主要因素◕✘│☁,因此本文主要討論執行速度最佳化✘↟。
  2 嵌入式程式最佳化遵循的原則
  嵌入式程式最佳化主要遵循以下3個原則✘↟。
  ①等效原則✘↟╃:最佳化前後程式實現的功能一致✘↟。
  ②有效原則✘↟╃:最佳化後要比最佳化前執行速度快或佔用儲存空間小◕✘│☁,或二者兼有✘↟。
  ③經濟原則✘↟╃:最佳化程式要付出較小的代價◕✘│☁,取得較好的結果✘↟。
  3 嵌入式程式最佳化的主要方面
  嵌入式程式的最佳化分為3個方面✘↟╃:演算法和資料結構最佳化▩·↟◕、編譯最佳化以及程式碼最佳化✘↟。
  3.1 演算法和資料結構最佳化
  演算法和資料結構是程式設計的核心所在◕✘│☁,演算法的好壞在很大程度上決定了程式的優劣✘↟。為了實現某種功能◕✘│☁,通常可以採用多種演算法◕✘│☁,不同演算法的複雜度和效率差別很大✘↟。選擇一種高效的演算法或對演算法進行最佳化◕✘│☁,可以使應用程式獲得更高的最佳化效能✘↟。例如✘↟╃:在資料搜尋時◕✘│☁,二分查詢法要比順序查詢法快✘↟。遞迴程式需要大量的過程呼叫◕✘│☁,並在堆疊中儲存所有返回過程的區域性變數◕✘│☁,時間效率和空間效率都非常低;若根據實際情況對遞迴程式採用迭代▩·↟◕、堆疊等方法進行非遞迴轉換◕✘│☁,則可大幅度提高程式的效能✘↟。
  資料結構在程式的設計中也佔有重要的地位✘↟。例如✘↟╃:如果在一些無序的資料中多次進行插入▩·↟◕、刪除資料項操作◕✘│☁,那麼採用連結串列結構就會比較快✘↟。
  演算法和資料結構最佳化是的最佳化技術✘↟。
  3.2 編譯最佳化
  現在◕✘│☁,很多的編譯器都具有一定的程式碼最佳化功能✘↟。在編譯時◕✘│☁,借用並行程式設計技術◕✘│☁,進行相關性分析;獲得源程式的語義資訊◕✘│☁,採用軟體流水線▩·↟◕、資料規劃▩·↟◕、迴圈重構等技術◕✘│☁,自動進行一些與處理器體系無關的最佳化◕✘│☁,生成高質量的程式碼✘↟。許多編譯器有不同級別的最佳化選項◕✘│☁,可以選用一種合適的最佳化方式✘↟。通常情況下◕✘│☁,如果選用了高級別的最佳化方式◕✘│☁,那麼編譯器將片面追求程式碼的最佳化◕✘│☁,有時會導致錯誤✘↟。
  另外◕✘│☁,還有一些專用的編譯器針對某些體系結構進行了最佳化設計◕✘│☁,可以充分利用硬體資源來生成高質量的程式碼✘↟。例如✘↟╃:Microsoft eMbedded Visual C++版的Intel編譯器完全針對Intel XScale體系◕✘│☁,經過高度最佳化◕✘│☁,能建立執行速度更快的程式碼✘↟。此編譯器採用了多種最佳化技術◕✘│☁,包括最佳化指令管道操作的排程技術▩·↟◕、雙重載入與儲存Intel XScale技術功能支援以及過程間最佳化(將函式使用的變數存放到暫存器◕✘│☁,以便快速訪問)等✘↟。
  在嵌入式軟體開發過程中應選擇一種最佳化能力強的編譯器◕✘│☁,充分利用其程式碼最佳化功能◕✘│☁,生成高效的程式碼◕✘│☁,提高程式的執行效率✘↟。
  3.3 程式碼最佳化
  程式碼最佳化◕✘│☁,就是採用組合語言或更精簡的程式程式碼來代替原有的程式碼◕✘│☁,使編譯後的程式執行效率更高✘↟。編譯器可以自動完成程式段和程式碼塊範圍內的最佳化◕✘│☁,但很難獲取程式語義資訊▩·↟◕、演算法流程和程式執行狀態資訊◕✘│☁,因而需要程式設計人員進行手工最佳化✘↟。以下是一些常用的最佳化技術和技巧✘↟。
  (1)程式碼替換
  使用週期短的指令代替週期長的指令◕✘│☁,以降低運算的強度✘↟。
  ①減少除法運算✘↟。用關係運算符兩邊乘除數避免除法操作◕✘│☁,還有一些除法和取模的運算可以用位操作來代替✘↟。因為位操作指令只需一個指令週期◕✘│☁,而“/”運算則需要呼叫子程式◕✘│☁,程式碼長◕✘│☁,執行慢✘↟。例如✘↟╃:
  最佳化前if((a/b)>c)和a=a/4
  最佳化後if(a>(b*c))和a=a>>2
  ②減少乘方運算✘↟。例如✘↟╃:
  最佳化前a=pow(a◕✘│☁,3.0)
  最佳化後a=a*a*a
  ③使用白加▩·↟◕、自減指令✘↟。例如✘↟╃:
  最佳化前a=a+1▩·↟◕、a=a-l
  最佳化後a++▩·↟◕、a--或inc▩·↟◕、dec
  ④儘量使用小的資料型別✘↟。在所定義的變數滿足使用要求的條件下◕✘│☁,優先使用順序為✘↟╃:字元型(char)>整型(im)>長整型(long int)>浮點型(float)✘↟。
  對除法來說◕✘│☁,使用無符號數比有符號數會有更高的效率✘↟。在實際呼叫中◕✘│☁,儘量減少資料型別的強制轉換;少用浮點運算◕✘│☁,如果運算的結果能夠控制在誤差之內◕✘│☁,則可用長整型代替浮點型✘↟。
  (2)全域性變數與區域性變數
  少用全域性變數◕✘│☁,多用區域性變數✘↟。全域性變數是放在資料儲存器中的◕✘│☁,定義了全域性變數◕✘│☁,MCU就少了一個可以利用的資料儲存器空間◕✘│☁,太多的全域性變數◕✘│☁,會導致編譯器無足夠的記憶體分配;而區域性變數則大多定位於MCU內部的暫存器中✘↟。在絕大多數的MCU中◕✘│☁,使用暫存器的操作速度比資料儲存器快◕✘│☁,指令也更靈活◕✘│☁,有利於生成質量更高的程式碼◕✘│☁,而且區域性變數所佔用的暫存器和資料儲存器在不同的模組中可以重複利用✘↟。
  (3)使用暫存器變數
  當一個變數被頻繁讀/寫時◕✘│☁,需要反覆訪問記憶體◕✘│☁,花費大量的存取時間✘↟。為了提高訪問效率◕✘│☁,可以使用CPU暫存器變數◕✘│☁,不需要訪問記憶體◕✘│☁,直接進行讀/寫✘↟。迴圈次數較多的迴圈控制變數及迴圈體內反覆使用的變數均可定義為暫存器變數◕✘│☁,而迴圈計數是應用暫存器變數的*✘↟。只有區域性自動變數和形參才可以定義為暫存器變數✘↟。因為暫存器變數屬於動態儲存方式◕✘│☁,因此凡需要採用靜態儲存方式的變數都不能定義為暫存器變數✘↟。暫存器變數的說明符是register✘↟。下面是一個採用暫存器變數的例子✘↟╃:
  (4)減少或避免執行耗時的操作
  應用程式的大量執行時問通常花費在關鍵程式模組◕✘│☁,關鍵模組往往包含迴圈或巢狀迴圈✘↟。減少迴圈中耗時的操作◕✘│☁,可以提高程式的執行速度✘↟。常見的耗時操作有✘↟╃:輸入/輸出操作▩·↟◕、檔案訪問▩·↟◕、圖形介面操作和系統呼叫等✘↟。其中◕✘│☁,如果無法避免檔案的讀/寫◕✘│☁,那麼對檔案的訪問將是影響程式執行速度的一大因素✘↟。提高檔案訪問速度的方法有兩種✘↟╃:一種是採用記憶體對映檔案;另一種是使用記憶體快取✘↟。
  (5)switch語句用法的最佳化
  程式設計時◕✘│☁,對case值按照可能性排序◕✘│☁,將最可能發生的情況放在第一個◕✘│☁,最不可能的情況放在最後一個◕✘│☁,可以提高switch語句塊的執行速度✘↟。
  (6)迴圈體的最佳化
  迴圈體是程式設計和最佳化的重點◕✘│☁,對於一些不需要迴圈變數參加運算的模組◕✘│☁,可以把它放到迴圈的外面✘↟。對於次數固定的迴圈體◕✘│☁,for迴圈比while迴圈效率更高◕✘│☁,減計數迴圈比增計數迴圈速度快✘↟。例如✘↟╃:
  實際執行時◕✘│☁,每次迴圈需要在迴圈體外加兩條指令✘↟╃:一條減法指令(減少迴圈計數值)和一條條件分支指令✘↟。這些指令稱為“迴圈開銷”✘↟。在ARM處理器上◕✘│☁,減法指令需要1個週期◕✘│☁,條件分支指令需要3個週期◕✘│☁,這樣每個迴圈另加了4個週期的開銷✘↟。可以採用迴圈展開的方法來提高迴圈執行的速度◕✘│☁,即✘↟╃:重複迴圈主題多次◕✘│☁,並按同樣的比例減少迴圈次數來減小迴圈的開銷◕✘│☁,以增加程式碼尺寸✘↟。來換取程式的執行速度✘↟。✘↟。
  (7)函式呼叫
  高效的呼叫函式◕✘│☁,儘量限制使用函式的引數個數◕✘│☁,不要超過4個✘↟。ARM呼叫時◕✘│☁,4個以下的形參透過暫存器傳遞◕✘│☁,第5個以上的形參透過儲存器棧傳遞✘↟。如果有更多的引數呼叫◕✘│☁,則可將相關的引數組織在一個結構體內◕✘│☁,用傳遞結構體指標來代替引數✘↟。
  (8)行內函數和內嵌彙編
  對效能影響大的重要函式可以使用關鍵字_inline內聯◕✘│☁,會省去呼叫函式的開銷◕✘│☁,負面影響是增加了程式碼尺寸✘↟。程式中對時間要求苛刻的部分可以用內嵌彙編來編寫◕✘│☁,通常可以帶來速度上的顯著提高✘↟。
  (9)查表代替計算
  在程式中儘量不進行非常複雜的運算◕✘│☁,如浮點數的開方✘↟。對於這些消耗時間和資源的運算◕✘│☁,可以採用空間換取時間的方法✘↟。預先將函式值計算出來◕✘│☁,置於程式儲存區中◕✘│☁,以後程式執行時直接查表即可◕✘│☁,減小了程式執行過程中重複計算的工作量✘↟。
  (10)使用針對硬體最佳化的函式庫
  Intel公司為XScale處理器設計的GPP(Graphics Performance Primitives library)/IPP(Integrated Perform-ance Primitives library)庫◕✘│☁,針對多媒體處理▩·↟◕、圖形處理和數值運算的一些典型操作和演算法進行了手工最佳化◕✘│☁,可以很好地發揮XScale硬體的計算潛能◕✘│☁,達到很高的執行效率✘↟。
  (11)利用硬體特性
  為了提高程式的執行效率◕✘│☁,要充分利用硬體特性來減小其執行開銷◕✘│☁,例如減少中斷次數▩·↟◕、利用DMA傳輸方式等✘↟。
  CPU對各種儲存器的訪問速度排序依次為✘↟╃:CPU內部RAM>外部同步RAM>外部非同步RAM>Flash/ROM✘↟。對於已經燒錄在Flash或ROM中的程式程式碼◕✘│☁,如果讓CPU直接從中讀取程式碼執行◕✘│☁,執行速度較慢◕✘│☁,則可在系統啟動後將Flash或ROM中的目的碼複製至RAM中後執行◕✘│☁,以提高程式的執行速度✘↟。
  4 結論
  嵌入式程式的效能最佳化與軟體的開發週期▩·↟◕、開發成本▩·↟◕、軟體的可讀性之聞通常存在矛盾✘↟。要權衡利弊◕✘│☁,作出折中的選擇✘↟。將演算法和資料結構最佳化作為選最佳化技術;然後根據功能▩·↟◕、效能差異和投資預算等因素選擇高效的編譯器▩·↟◕、系統執行庫和圖形庫;使用效能監測工具偵測佔主要執行時間的程式熱點◕✘│☁,採用程式碼最佳化手段對其進行最佳化;最後使用高效的編譯器進行編譯最佳化◕✘│☁,從而得到高質量的程式碼✘↟。
  • 上一篇✘↟╃:調速器的運轉方式
    下一篇✘↟╃:變頻器的分類
    • QQ線上客服
    •   線上諮詢
    • 點選這裡給我發訊息
    電話
    021-69833975
    手機
    18321155129
    动漫gay禁18自慰网站,娇妻被猛男老外玩三pav,色猫咪免费人成网站在线观看,亚洲日韩精品无码中文字幕专区