在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

使用宏定義

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

寫(xiě)一個(gè)“標(biāo)準(zhǔn)”宏MIN ,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè):

錯(cuò)誤做法:

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

正確做法:

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

對(duì)于宏,我們需要知道三點(diǎn):

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

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

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

下面的代碼:

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

將被替換為:

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

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

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

使用寄存器變量

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

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

  1. 只有局部自動(dòng)變量和形參才可以定義為寄存器變量。因?yàn)榧拇嫫髯兞繉儆趧?dòng)態(tài)存儲(chǔ)方式,凡需要采用靜態(tài)存儲(chǔ)方式的量都不能定義為寄存器變量,包括:模塊間全局變量、模塊內(nèi)全局變量、局部static變量;

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

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

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

內(nèi)嵌匯編

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

在程序中,存在一個(gè)80-20原則,即20%的程序消耗了80%的運(yùn)行時(shí)間,因而我們要改進(jìn)效率,最主要是考慮改進(jìn)那20%的代碼。

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

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

利用硬件特性

首先要明白CPU對(duì)各種存儲(chǔ)器的訪問(wèn)速度,基本上是:

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

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

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

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

活用位操作

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

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

對(duì)于以2的指數(shù)次方為“*”、“/”或“%”因子的數(shù)學(xué)運(yùn)算,轉(zhuǎn)化為移位運(yùn)算“<< >>”通??梢蕴岣咚惴ㄐ省R?yàn)槌顺\(yùn)算指令周期通常比移位運(yùn)算大。

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

我們通常要對(duì)硬件寄存器進(jìn)行位設(shè)置,譬如,我們通過(guò)將AM186ER型80186處理器的中斷屏蔽控制寄存器的第低6位設(shè)置為0(開(kāi)中斷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àn)的,我們需要牢固掌握。

總結(jié)

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

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

很遺憾,標(biāo)準(zhǔn)C至今沒(méi)有包括C++中inline函數(shù)的功能,inline函數(shù)兼具無(wú)調(diào)用開(kāi)銷和安全的優(yōu)點(diǎn)。

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

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

責(zé)任編輯:xj

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

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


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

    關(guān)注

    5146

    文章

    19598

    瀏覽量

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

    關(guān)注

    88

    文章

    3686

    瀏覽量

    95043

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

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

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

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

    嵌入式系統(tǒng)存儲(chǔ)的軟件優(yōu)化策略

    嵌入式系統(tǒng)開(kāi)發(fā)領(lǐng)域,存儲(chǔ)器作為信息交互的核心載體,其技術(shù)特性直接影響著系統(tǒng)性能與穩(wěn)定性。然而,有些人在面對(duì)Linux、安卓等復(fù)雜操作系統(tǒng)環(huán)境時(shí),理解其存儲(chǔ)機(jī)制尚存局限,為突破這些技術(shù)
    發(fā)表于 02-28 14:17

    嵌入式系統(tǒng)中的代碼優(yōu)化與壓縮技術(shù)

    在當(dāng)今數(shù)字化時(shí)代,嵌入式系統(tǒng)廣泛應(yīng)用于各個(gè)領(lǐng)域,從智能家居設(shè)備到工業(yè)控制系統(tǒng),從汽車電子到可穿戴設(shè)備,它們無(wú)處不在。而在嵌入式系統(tǒng)開(kāi)發(fā)中,代
    發(fā)表于 02-26 15:00

    如何提高嵌入式代碼質(zhì)量?

    的情況下也必須保持穩(wěn)定的性能。 3. 硬件依賴:嵌入式軟件緊密依賴硬件平臺(tái),需要充分理解硬件特性才能編寫(xiě)高效且穩(wěn)定的代碼。 了解這些特點(diǎn)有助于開(kāi)發(fā)人員在編寫(xiě)代碼時(shí)有針對(duì)性地優(yōu)化和調(diào)整,以滿足
    發(fā)表于 01-15 10:48

    ARM嵌入式編程高效技巧

    隨著物聯(lián)網(wǎng)和智能設(shè)備的快速發(fā)展,ARM嵌入式系統(tǒng)的應(yīng)用越來(lái)越廣泛。從智能手機(jī)到智能家居,再到工業(yè)自動(dòng)化,ARM處理器幾乎無(wú)處不在。因此,掌握ARM嵌入式編程的高效技巧對(duì)于開(kāi)發(fā)者來(lái)說(shuō)至關(guān)
    的頭像 發(fā)表于 12-28 09:17 ?640次閱讀

    新手怎么學(xué)嵌入式?

    實(shí)現(xiàn)一些簡(jiǎn)單的功能,如點(diǎn)亮一個(gè) LED 燈、讀取傳感器數(shù)據(jù)等,來(lái)加深對(duì)嵌入式技術(shù)的理解。你還可以參加一些線上或線下的嵌入式項(xiàng)目實(shí)踐活動(dòng),與其他愛(ài)好者一起學(xué)習(xí)和交流。 5. 學(xué)習(xí)嵌入式
    發(fā)表于 12-12 10:51

    什么是嵌入式人工智能

    嵌入式人工智能的目標(biāo)是使嵌入式系統(tǒng)具備智能化的感知、分析和響應(yīng)能力,從而實(shí)現(xiàn)自主決策、自適應(yīng)學(xué)習(xí)和智能交互等功能,以提高系統(tǒng)
    的頭像 發(fā)表于 12-11 09:23 ?934次閱讀
    什么是<b class='flag-5'>嵌入式</b>人工智能

    【「嵌入式系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)」閱讀體驗(yàn)】+ 學(xué)習(xí)一個(gè)STM32的案例

    感謝電子發(fā)燒友論壇和電子工業(yè)出版社的贈(zèng)書(shū)。 在[上一篇帖子](【新提醒】【「嵌入式系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)」閱讀體驗(yàn)】+ 初步印象 - 社區(qū)活動(dòng)專版 - 電子技術(shù)論壇 - 廣受歡迎的專業(yè)電子論壇!)中介紹了
    發(fā)表于 12-06 22:22

    什么是嵌入式?一文讀懂嵌入式主板

    在現(xiàn)代科技浪潮中,嵌入式技術(shù)已成為支撐各種智能設(shè)備和系統(tǒng)運(yùn)行的核心力量。那么,究竟什么是嵌入式嵌入式系統(tǒng),顧名思義,是將計(jì)算機(jī)的硬件和軟件
    的頭像 發(fā)表于 10-16 10:14 ?2523次閱讀

    AMD 面向嵌入式系統(tǒng)推出高能效 EPYC 嵌入式 8004 系列

    領(lǐng)先地位。 ? AMD EPYC 嵌入式 8004 系列處理器專為計(jì)算密集型嵌入式系統(tǒng)所設(shè)計(jì),可為高需求工作負(fù)載提供卓越性能,同時(shí)以緊湊的尺寸規(guī)格最大限度為空間和功率受限型應(yīng)用提升能效
    發(fā)表于 10-11 13:58 ?996次閱讀

    【「嵌入式Hypervisor:架構(gòu)、原理與應(yīng)用」閱讀體驗(yàn)】+全文學(xué)習(xí)心得

    Hypervisor是一種在嵌入式系統(tǒng)實(shí)現(xiàn)虛擬化技術(shù)的關(guān)鍵組件,它能夠在同一硬件平臺(tái)上并行運(yùn)行多個(gè)操作系統(tǒng)或應(yīng)用程序,提供資源隔離、管理和優(yōu)化
    發(fā)表于 10-09 19:11

    嵌入式系統(tǒng)的未來(lái)趨勢(shì)有哪些?

    智能家居領(lǐng)域,嵌入式系統(tǒng)可以集成語(yǔ)音識(shí)別和自然語(yǔ)言處理技術(shù),去實(shí)現(xiàn)智能家電的語(yǔ)音控制。 2. 更強(qiáng)大的處理能力 在未來(lái)的嵌入式系統(tǒng)將具備更加
    發(fā)表于 09-12 15:42

    七大嵌入式GUI盤點(diǎn)

    嵌入式圖形用戶界面(GUI)是一種為嵌入式系統(tǒng)設(shè)計(jì)的用戶界面,它可以讓用戶通過(guò)圖形化的方式與設(shè)備進(jìn)行交互。以下是對(duì)七種嵌入式 GUI 的盤點(diǎn)。 emWin 由德國(guó)SEGGER公司
    發(fā)表于 09-02 10:58

    嵌入式系統(tǒng)怎么學(xué)?

    一系列課程和技術(shù),包括但不限于以下內(nèi)容: 1、基礎(chǔ)知識(shí):學(xué)習(xí)計(jì)算機(jī)組成原理、數(shù)字電路、模擬電路等基礎(chǔ)知識(shí),建立對(duì)計(jì)算機(jī)硬件的認(rèn)知與理解。 2、編程語(yǔ)言:掌握至少一種嵌入式系統(tǒng)常用的編程
    發(fā)表于 07-02 10:10
    主站蜘蛛池模板: 免费一级毛片在线播放不收费 | 91精品福利久久久 | 一级特黄aa大片免费播放视频 | 手机在线黄色 | 色五月情 | 亚洲五月综合网色九月色 | 欧美一级日韩在线观看 | 国产理论在线 | 青草久 | 99久久999久久久综合精品涩 | 免费观看成人欧美1314www | 久久精品国产大片免费观看 | 牛牛碰在线 | 明星三级国产免费播放 | 欧美一卡二三卡四卡不卡 | 天天做天天爱天天操 | 在线免费黄色 | 免费视频网站在线看视频 | a理论片 | 在线a免费观看最新网站 | 欧美性猛交xxxx乱大交高清 | 欧美性白人极品1819hd | 国产偷窥女洗浴在线观看亚洲 | 亚洲aaa视频| 美女一级一级毛片 | 奇米精品| 性大特级毛片视频 | 泰剧天堂 | 免费观看在线视频 | 免费黄色三级 | 精品四虎免费观看国产高清午夜 | 欧美色爱综合 | 濑亚美莉iptd619在线观看 | 色五五月五月开 | 中文字幕一区二区三区四区五区 | 国产一级特黄特色aa毛片 | 黄色网 在线播放 | 国产免费私拍一区二区三区 | 欧美综合网站 | 久久天天躁狠狠躁夜夜躁 | 好大好硬好深好爽的视频 |