国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

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

嵌入式系統(tǒng)編程如何實現(xiàn)性能優(yōu)化

Q4MP_gh_c472c21 ? 來源:嵌入式ARM ? 作者:李肖遙 ? 2020-12-24 16:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

C語言中,宏是產(chǎn)生內(nèi)嵌代碼的唯一方法。對于嵌入式系統(tǒng)而言,為了能達到性能要求,宏是一種很好的代替函數(shù)的方法

使用宏定義

在C語言中,宏是產(chǎn)生內(nèi)嵌代碼的唯一方法。對于嵌入式系統(tǒng)而言,為了能達到性能要求,宏是一種很好的代替函數(shù)的方法。

寫一個“標準”宏MIN ,這個宏輸入兩個參數(shù)并返回較小的一個:

錯誤做法:

1#define MIN(A,B)( A <= B ?A :B )

正確做法:

1#define MIN(A,B)((A)<=?(B)???(A)?:?(B)?)

對于宏,我們需要知道三點:

  1. 宏定義“像”函數(shù);

  2. 宏定義不是函數(shù),因而需要括上所有“參數(shù)”;

  3. 宏定義可能產(chǎn)生副作用。

下面的代碼:

1least=MIN(*p++,b);

將被替換為:

1((*p++)<=?(b)??(*p++):(b))

發(fā)生的事情無法預(yù)料。

因而不要給宏定義傳入有副作用的“參數(shù)”。

使用寄存器變量

當對一個變量頻繁被讀寫時,需要反復(fù)訪問內(nèi)存,從而花費大量的存取時間。為此,C語言提供了一種變量,即寄存器變量。這種變量存放在CPU的寄存器中,使用時,不需要訪問內(nèi)存,而直接從寄存器中讀寫,從而提高效率。

寄存器變量的說明符是register。對于循環(huán)次數(shù)較多的循環(huán)控制變量及循環(huán)體內(nèi)反復(fù)使用的變量均可定義為寄存器變量,而循環(huán)計數(shù)是應(yīng)用寄存器變量的最好候選者。

  1. 只有局部自動變量和形參才可以定義為寄存器變量。因為寄存器變量屬于動態(tài)存儲方式,凡需要采用靜態(tài)存儲方式的量都不能定義為寄存器變量,包括:模塊間全局變量、模塊內(nèi)全局變量、局部static變量;

  2. register是一個“建議”型關(guān)鍵字,意指程序建議該變量放在寄存器中,但最終該變量可能因為條件不滿足并未成為寄存器變量,而是被放在了存儲器中,但編譯器中并不報錯(在C++語言中有另一個“建議”型關(guān)鍵字:inline)。

下面是一個采用寄存器變量的例子:

本程序循環(huán)n次,i和s都被頻繁使用,因此可定義為寄存器變量。

內(nèi)嵌匯編

程序中對時間要求苛刻的部分可以用內(nèi)嵌匯編來重寫,以帶來速度上的顯著提高。但是,開發(fā)和測試匯編代碼是一件辛苦的工作,它將花費更長的時間,因而要慎重選擇要用匯編的部分。

在程序中,存在一個80-20原則,即20%的程序消耗了80%的運行時間,因而我們要改進效率,最主要是考慮改進那20%的代碼。

嵌入式C程序中主要使用在線匯編,即在C程序中直接插入_asm{ }內(nèi)嵌匯編語句:

 1/*把兩個輸入?yún)?shù)的值相加,結(jié)果存放到另外一個全局變量中*/
 2intresult;
 3voidAdd(longa,long*b)
 4{
 5_asm
 6{
 7MOVAX,a
 8MOVBX,b
 9ADDAX,[BX]
10MOVresult,AX
11}
12}

利用硬件特性

首先要明白CPU對各種存儲器的訪問速度,基本上是:

CPU內(nèi)部RAM->外部同步RAM->外部異步RAM->FLASH/ROM

對于程序代碼,已經(jīng)被燒錄在FLASH或ROM中,我們可以讓CPU直接從其中讀取代碼執(zhí)行,但通常這不是一個好辦法,我們最好在系統(tǒng)啟動后將FLASH或ROM中的目標代碼拷貝入RAM中后再執(zhí)行以提高取指令速度;

對于UART等設(shè)備,其內(nèi)部有一定容量的接收BUFFER,我們應(yīng)盡量在BUFFER被占滿后再向CPU提出中斷。例如計算機終端在向目標機通過RS-232傳遞數(shù)據(jù)時,不宜設(shè)置UART只接收到一個BYTE就向CPU提中斷,從而無謂浪費中斷處理時間;

如果對某設(shè)備能采取DMA方式讀取,就采用DMA讀取,DMA讀取方式在讀取目標中包含的存儲信息較大時效率較高,其數(shù)據(jù)傳輸?shù)幕締挝皇菈K,而所傳輸?shù)臄?shù)據(jù)是從設(shè)備直接送入內(nèi)存的(或者相反)。DMA方式較之中斷驅(qū)動方式,減少了CPU 對外設(shè)的干預(yù),進一步提高了CPU與外設(shè)的并行操作程度。

活用位操作

使用C語言的位操作可以減少除法和取模的運算。在計算機程序中數(shù)據(jù)的位是可以操作的最小數(shù)據(jù)單位,理論上可以用“位運算”來完成所有的運算和操作,因而,靈活的位操作可以有效地提高程序運行的效率。舉例如下:

1/*方法1*/
2inti,j;
3i=879/16;
4j=562%32;
5/*方法2*/
6inti,j;
7i=879>>4;
8j=562-(562>>5<

對于以2的指數(shù)次方為“*”、“/”或“%”因子的數(shù)學運算,轉(zhuǎn)化為移位運算“<< >>”通常可以提高算法效率。因為乘除運算指令周期通常比移位運算大。

C語言位運算除了可以提高運算效率外,在嵌入式系統(tǒng)的編程中,它的另一個最典型的應(yīng)用,而且十分廣泛地正在被使用著的是位間的與(&)、或(|)、非(~)操作,這跟嵌入式系統(tǒng)的編程特點有很大關(guān)系。

我們通常要對硬件寄存器進行位設(shè)置,譬如,我們通過將AM186ER型80186處理器的中斷屏蔽控制寄存器的第低6位設(shè)置為0(開中斷2),最通用的做法是:

1#defineINT_I2_MASK0x0040
2
3wTemp=inword(INT_MASK);
4outword(INT_MASK,wTemp&~INT_I2_MASK);

而將該位設(shè)置為1的做法是:

1#defineINT_I2_MASK0x0040
2wTemp=inword(INT_MASK);
3outword(INT_MASK,wTemp|INT_I2_MASK);

判斷該位是否為1的做法是:

1#defineINT_I2_MASK0x0040
2wTemp=inword(INT_MASK);
3if(wTemp&INT_I2_MASK)
4{
5/*該位為1*/
6}

上述方法在嵌入式系統(tǒng)的編程中是非常常見的,我們需要牢固掌握。

總結(jié)

在性能優(yōu)化方面永遠注意80-20準備,不要優(yōu)化程序中開銷不大的那80%,這是勞而無功的。

宏定義是C語言中實現(xiàn)類似函數(shù)功能而又不具函數(shù)調(diào)用和返回開銷的較好方法,但宏在本質(zhì)上不是函數(shù),因而要防止宏展開后出現(xiàn)不可預(yù)料的結(jié)果,對宏的定義和使用要慎而處之。

很遺憾,標準C至今沒有包括C++中inline函數(shù)的功能,inline函數(shù)兼具無調(diào)用開銷和安全的優(yōu)點。

使用寄存器變量、內(nèi)嵌匯編和活用位操作也是提高程序效率的有效方法。

除了編程上的技巧外,為提高系統(tǒng)的運行效率,我們通常也需要最大可能地利用各種硬件設(shè)備自身的特點來減小其運轉(zhuǎn)開銷,例如減小中斷次數(shù)、利用DMA傳輸方式等。

責任編輯:xj

原文標題:嵌入式系統(tǒng)編程怎么實現(xiàn)性能優(yōu)化?

文章出處:【微信公眾號:嵌入式ARM】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。


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

    關(guān)注

    5198

    文章

    20449

    瀏覽量

    334079
  • 編程
    +關(guān)注

    關(guān)注

    90

    文章

    3716

    瀏覽量

    97191

原文標題:嵌入式系統(tǒng)編程怎么實現(xiàn)性能優(yōu)化?

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    什么是嵌入式應(yīng)用開發(fā)?

    實現(xiàn)和部署,還包括硬件選擇、軟件設(shè)計、測試、集成和維護等流程?。 定義和背景 嵌入式應(yīng)用開發(fā)是指將軟件部署到嵌入式系統(tǒng)中,這些系統(tǒng)廣泛
    發(fā)表于 01-12 16:13

    arm嵌入式主板優(yōu)缺點

    Windows CE、Linux等主流的嵌入式操作系統(tǒng)。   ARM的優(yōu)點   一、高可靠性、高穩(wěn)定性:在工業(yè)控制領(lǐng)域,性能穩(wěn)定可靠是自動控制基本的要求,ARM嵌入式主板有著很特殊
    發(fā)表于 01-08 07:08

    C語言嵌入式系統(tǒng)編程注意事項-內(nèi)存操作

    C語言嵌入式系統(tǒng)編程注意事項之內(nèi)存操作 在嵌入式系統(tǒng)編程中,常常要求在特定的內(nèi)存單元讀寫內(nèi)容,匯編有對應(yīng)的MOV指令,而除C/C++以外的
    發(fā)表于 01-04 07:31

    從小白到大牛:Linux嵌入式系統(tǒng)開發(fā)的完整指南

    使用 C 語言(嵌入式開發(fā)主力語言)、POSIX 標準接口(文件 IO、進程、線程、信號量)。推薦通過 “溫度采集系統(tǒng)”“串口通信工具”等小型項目練手,重點掌握多線程編程(解決并發(fā)任務(wù))、交叉編譯(主機編譯
    發(fā)表于 12-16 10:42

    嵌入式和FPGA的區(qū)別

    ,F(xiàn)PGA憑借硬件并行處理能力,能夠實現(xiàn)納秒級響應(yīng),遠優(yōu)于微秒級的嵌入式系統(tǒng)。 功耗效率上,嵌入式系統(tǒng)針對特定應(yīng)用
    發(fā)表于 11-19 06:55

    嵌入式系統(tǒng)的定義和應(yīng)用領(lǐng)域

    在一起,共同構(gòu)成了一個高效、穩(wěn)定的工作系統(tǒng)。 其實,嵌入式系統(tǒng)的概念與個人PC有著相似的底層邏輯。單片機,作為單個芯片上的計算機系統(tǒng),其定義明確且獨特。盡管不同的單片機在配置、
    發(fā)表于 11-17 06:49

    2025年最佳的嵌入式編程語言有哪些呢?

    嵌入式系統(tǒng)是現(xiàn)代科技不可或缺的一部分。它們存在于家用電器、汽車、住宅、醫(yī)院、商店等各個領(lǐng)域。它們與我們的社會緊密相連。選擇合適的語言來構(gòu)建嵌入式系統(tǒng)對于成功至關(guān)重要。那么,2025年最
    的頭像 發(fā)表于 11-14 10:27 ?1424次閱讀
    2025年最佳的<b class='flag-5'>嵌入式</b><b class='flag-5'>編程</b>語言有哪些呢?

    嵌入式開發(fā)的關(guān)鍵點介紹

    嵌入式開發(fā)在現(xiàn)代科技中扮演著非常重要的角色。隨著物聯(lián)網(wǎng)的發(fā)展,嵌入式系統(tǒng)的需求也越來越大。嵌入式開發(fā)不僅需要開發(fā)人員具備深入的硬件知識和編程
    發(fā)表于 11-13 08:12

    盤點嵌入式就業(yè)所需要的技能有哪些?

    ,把握未來的職業(yè)機遇。 1.智能汽車行業(yè): - 熟悉嵌入式編程語言,如C/C++、Python等。 - 掌握嵌入式系統(tǒng)設(shè)計與開發(fā)流程,了解汽車電子控制
    發(fā)表于 08-11 15:43

    嵌入式和單片機,是同一個東西嗎?

    嵌入式系統(tǒng)的設(shè)計和實現(xiàn)需要考慮功耗、尺寸、成本和性能以外的其他因素,如可靠性、安全性和實時性。此外,嵌入式
    發(fā)表于 07-09 10:20

    Linux嵌入式和單片機嵌入式的區(qū)別?

    : 單片機嵌入式 :開發(fā)環(huán)境相對簡單,通常使用C語言或匯編語言進行編程,開發(fā)工具包括Keil、IAR等。 Linux嵌入式 :開發(fā)環(huán)境較為復(fù)雜,除了需要掌握C語言,還需要了解Linux操作
    發(fā)表于 06-20 09:46

    運行在嵌入式系統(tǒng)上的emApps

    在當今快節(jié)奏的嵌入式系統(tǒng)世界中,靈活性和適應(yīng)性是嵌入式系統(tǒng)實現(xiàn)的關(guān)鍵。SEGGER推出了其最新創(chuàng)新:Embedded apps(emApps
    的頭像 發(fā)表于 06-18 09:53 ?873次閱讀
    運行在<b class='flag-5'>嵌入式</b><b class='flag-5'>系統(tǒng)</b>上的emApps

    嵌入式開發(fā)入門指南:從零開始學習嵌入式

    特定功能的計算機系統(tǒng),廣泛應(yīng)用于智能家居、工業(yè)控制、醫(yī)療設(shè)備、車載系統(tǒng)等領(lǐng)域。 2. 學習嵌入式開發(fā)的前置知識熟悉C語言編程掌握基本的數(shù)據(jù)結(jié)構(gòu)與算法了解數(shù)字電路與微控制器原理熟悉Lin
    發(fā)表于 05-15 09:29

    嵌入式編程設(shè)計模式

    嵌入式編程設(shè)計模式,介紹如何使用設(shè)計模式為嵌入式系統(tǒng)創(chuàng)建高效且優(yōu)化的C語言設(shè)計。 純分享貼,有需要可以直接下載附件獲取完整資料! (如
    發(fā)表于 04-15 14:47

    如何成為一名嵌入式軟件工程師?

    系統(tǒng)架構(gòu):能夠設(shè)計合理的系統(tǒng)架構(gòu),實現(xiàn)模塊間的解耦和高效的數(shù)據(jù)交互。 性能優(yōu)化:通過算法優(yōu)化
    發(fā)表于 04-15 14:37