亚洲一级免费看,特黄特色大片免费观看播放器,777毛片,久久久久国产一区二区三区四区,欧美三级一区二区,国产精品一区二区久久久久,人人澡人人草

C語(yǔ)言

嵌入式C語(yǔ)言性能優(yōu)化方法

時(shí)間:2025-05-06 21:57:44 C語(yǔ)言 我要投稿
  • 相關(guān)推薦

嵌入式C語(yǔ)言性能優(yōu)化方法

  嵌入式系統(tǒng)是指完成一種或幾種特定功能的計(jì)算機(jī)系統(tǒng),具有自動(dòng)化程度高,響應(yīng)速度快等優(yōu)點(diǎn),目前已廣泛應(yīng)用于消費(fèi)電子,工業(yè)控制等領(lǐng)域.嵌入式系統(tǒng)受其使用的硬件以及運(yùn)行環(huán)境的限制,非常注重代碼的時(shí)間和空間效率,因此選擇一種合適的開發(fā)語(yǔ)言十分重要.嵌入式C語(yǔ)言性能優(yōu)化方法有哪些?下面是相關(guān)的知識(shí),歡迎閱讀。

  使用宏定義

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

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

  錯(cuò)誤做法:

  #define MIN(A,B)  ( A  外部同步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ī)通過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 */

  int i,j;

  i = 879 / 16;

  j = 562 % 32;

  /* 方法2 */

  int i,j;

  i = 879 >> 4;

  j = 562 - (562 >> 5 >"通?梢蕴岣咚惴ㄐ。因?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è)置,譬如,我們通過將AM186ER型80186處理器的中斷屏蔽控制寄存器的第低6位設(shè)置為0(開中斷2),最通用的做法是:

  #define INT_I2_MASK 0x0040

  wTemp = inword(INT_MASK);

  outword(INT_MASK, wTemp &~INT_I2_MASK);

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

  #define INT_I2_MASK 0x0040

  wTemp = inword(INT_MASK);

  outword(INT_MASK, wTemp | INT_I2_MASK);

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

  #define INT_I2_MASK 0x0040

  wTemp = inword(INT_MASK);

  if(wTemp & INT_I2_MASK)

  {

  … /* 該位為1 */

  }

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


【嵌入式C語(yǔ)言性能優(yōu)化方法】相關(guān)文章:

嵌入式C語(yǔ)言優(yōu)化技巧10-27

嵌入式C語(yǔ)言優(yōu)化小技巧09-09

如何優(yōu)化C程序性能04-27

優(yōu)化JavaScript腳本的性能的方法09-03

c語(yǔ)言空間換時(shí)間優(yōu)化代碼的方法10-10

PHP程序性能優(yōu)化的方法10-29

c語(yǔ)言優(yōu)化階段07-11

c語(yǔ)言空間換時(shí)間優(yōu)化代碼的技巧方法06-19

C語(yǔ)言優(yōu)化小技巧10-04