日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

3天內不再提示

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

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

掃碼添加小助手

加入工程師交流群

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

使用宏定義

在C語言中,宏是產(chǎn)生內嵌代碼的唯一方法。對于嵌入式系統(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ā)生的事情無法預料。

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

使用寄存器變量

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

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

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

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

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

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

內嵌匯編

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

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

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

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

利用硬件特性

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

CPU內部RAM->外部同步RAM->外部異步RAM->FLASH/ROM

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

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

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

活用位操作

使用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ù)學運算,轉化為移位運算“<< >>”通??梢蕴岣咚惴ㄐ?。因為乘除運算指令周期通常比移位運算大。

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

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

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

而將該位設置為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)的編程中是非常常見的,我們需要牢固掌握。

總結

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

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

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

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

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

責任編輯:xj

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

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


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

    關注

    5210

    文章

    20680

    瀏覽量

    337430
  • 編程
    +關注

    關注

    90

    文章

    3724

    瀏覽量

    97459

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何成為一名高薪嵌入式工程師?

    精通指針、內存管理、結構體、位操作等,理解底層硬件交互原理。 C++(可選):面向對象編程嵌入式Linux或復雜系統(tǒng)中應用廣泛,如驅動開發(fā)、中間件設計。 匯編語言:理解處理器架構(如ARM
    發(fā)表于 04-09 09:03

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    嵌入式需要掌握哪些核心技能?

    : 1)C語言與底層編程 核心地位:C語言是嵌入式開發(fā)的基石,需精通指針操作、內存管理、位運算,直接操控硬件資源。 延伸技能:C++用于復雜項目架構設計,匯編語言優(yōu)化底層性能(如啟動代
    發(fā)表于 10-21 16:25

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

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

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

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

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

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

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

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

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

    特定功能的計算機系統(tǒng),廣泛應用于智能家居、工業(yè)控制、醫(yī)療設備、車載系統(tǒng)等領域。 2. 學習嵌入式開發(fā)的前置知識熟悉C語言編程掌握基本的數(shù)據(jù)結構與算法了解數(shù)字電路與微控制器原理熟悉Lin
    發(fā)表于 05-15 09:29
    邹平县| 土默特左旗| 庆城县| 张家港市| 苏州市| 郯城县| 施秉县| 五常市| 英山县| 甘肃省| 庆云县| 长治县| 石河子市| 阿鲁科尔沁旗| 儋州市| 长宁区| 区。| 长治县| 灵石县| 平阴县| 大方县| 吉安市| 濮阳市| 山丹县| 普定县| 凤山县| 延庆县| 翁牛特旗| 滦南县| 元谋县| 长治县| 体育| 简阳市| 三门县| 灵寿县| 上思县| 和政县| 呼玛县| 临漳县| 珲春市| 股票|