一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看

C語(yǔ)言

嵌入式C語(yǔ)言?xún)?yōu)化技巧

時(shí)間:2025-03-11 07:00:12 松濤 C語(yǔ)言 我要投稿

嵌入式C語(yǔ)言?xún)?yōu)化技巧

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

  目前,在嵌入式系統開(kāi)發(fā)中可使用的語(yǔ)言很多,其中 C語(yǔ)言應用得最廣泛。雖然用 C 語(yǔ)言編程具有許多優(yōu)點(diǎn),但基于嵌入式系統的C語(yǔ)言和標準 C語(yǔ)言又有很大區別。接下來(lái)小編結合嵌入式系統的特點(diǎn)和高手們的一些積累,給大家整理出在程序設計中代碼優(yōu)化的一些小技巧。

  1、嵌入式C語(yǔ)言的特點(diǎn)

  作為一種結構化程序設計語(yǔ)言,C 語(yǔ)言兼顧多種高級語(yǔ)言的特點(diǎn),具有很強的功能性和可移植性。但在嵌入式系統開(kāi)發(fā)中,出于對低價(jià)產(chǎn)品的需求,系統的計算能力和存儲容量都非常有限,因此如何利用好這些資源就顯得十分重要。開(kāi)發(fā)人員應注意嵌入式 C語(yǔ)言和標準 C 語(yǔ)言的區別,減少生成代碼長(cháng)度,提高程序執行效率,在程序設計中對代碼進(jìn)行優(yōu)化。

  2、C代碼在程序中的優(yōu)化

  現在的 C 編譯器會(huì )自動(dòng)對代碼進(jìn)行優(yōu)化,但這些優(yōu)化是對執行速度和代碼長(cháng)度的平衡。如果要獲得更小且執行效率更高的代碼,需要程序員手工對代碼進(jìn)行優(yōu)化。

  3、變量類(lèi)型的定義

  不同的數據類(lèi)型所生成的機器代碼長(cháng)度相差很多,變量類(lèi)型選取的范圍越小運行速度越快,占用的內存越少。能夠使用字符型(char)定義的變量,就不要使用整型(int)變量來(lái)定義;能夠使用整型變量定義的變量就不要用長(cháng)整型(long int),能不使用浮點(diǎn)型(float)變量就不要使用浮點(diǎn)型變量。相同類(lèi)型的數據類(lèi)型,有無(wú)符號對機器代碼長(cháng)度也有影響。因此我們應按照實(shí)際需要合理的選用數據類(lèi)型。當然,在定義變量后不要超過(guò)變量的作用范圍,如果超過(guò)變量的范圍賦值,C編譯器并不報錯,但程序運行結果卻錯了,而且這樣的錯誤很難發(fā)現。

  4、算法優(yōu)化

  算法優(yōu)化指對程序時(shí)空復雜度的優(yōu)化:在 PC 機上進(jìn)行程序設計時(shí)一般不必過(guò)多關(guān)注程序代碼的長(cháng)短,只需考慮功能的實(shí)現,但嵌入式系統就必須考慮系統的硬件資源,在程序設計時(shí),應盡量采用生成代碼短的算法,在不影響程序功能實(shí)現的情況下優(yōu)化算法。

  5、適當的使用宏

  在C程序中使用宏代碼可以提高程序的執行效率。宏代碼本身不是函數,但使用起來(lái)像函數。函數調用要使用系統的棧來(lái)保存數據,同時(shí) CPU 在函數調用時(shí)需要保存和恢復當前的現場(chǎng),進(jìn)行進(jìn)棧和出棧操作,所以函數調用也需要 CPU時(shí)間。而宏定義就沒(méi)有這個(gè)問(wèn)題:宏定義僅僅作為預先寫(xiě)好的代碼嵌入到當前程序中,不產(chǎn)生函數調用,所占用的僅僅是一些空間,省去了參數壓棧,生成匯編語(yǔ)言的 call 調用,返回參數,執行 return等過(guò)程,從而提高了程序的執行速度。雖然宏破壞了程序的可讀性,使排錯更加麻煩,但對于嵌入式系統,為了達到要求的性能,嵌入代碼常常是必須的做法。

  此外,我們還要避免不必要的函數調用,請看下面的代碼:

  [plain] view plain copy print?

  void str_print( char *str )

  {

  int i;

  for ( i = 0; i < strlen ( str ); i++ )

  {

  printf("%c",str[ i ] );

  }

  }

  void str_print1 ( char *str )

  {

  int len;

  len = strlen ( str );

  for ( i = 0; i < len; i++ )

  {

  printf("%c",str[ i ] );

  }

  }

  請注意,這兩個(gè)函數的功能相似。然而,第一個(gè)函數調用strlen函數多次,而第二個(gè)函數只調用函數strlen一次。因此第二個(gè)函數性能明顯比第一個(gè)好。

  6、內嵌匯編

  程序中對時(shí)間要求苛刻的部分可以用內嵌匯編來(lái)重寫(xiě),以帶來(lái)速度上的顯著(zhù)提高。但是,開(kāi)發(fā)和測試匯編代碼是一件辛苦的工作,它將花費更長(cháng)的時(shí)間,因而要慎重選擇要用匯編的部分。在程序中,存在一個(gè)80-20原則,即20%的程序消耗了80%的運行時(shí)間,因而我們要改進(jìn)效率,最主要是考慮改進(jìn)那20%的代碼。

  7、提高循環(huán)語(yǔ)言的效率

  在 C 語(yǔ)言中循環(huán)語(yǔ)句使用頻繁,提高循環(huán)體效率的基本辦法就是降低循環(huán)體的復雜性:

  (1) 在多重循環(huán)中,應將最長(cháng)的循環(huán)放在最內層,最短的循環(huán)放在最外層。這樣可以減少 CPU跨切循環(huán)的次數。如例 1-1 的效率比 1-2 的效率要低:

  [plain] view plain copy print?

  for (j = 0; j < 30; j++)

  {

  for (i = 0; i < 10; i++)

  {……}

  } // 例子 1-1

  for (i = 0; i < 10; i++)

  {

  for (j = 0; j < 30; j++)

  {……}

  } // 例子 2-2 程序部簡(jiǎn)潔但效率高

  8、提高 switch 語(yǔ)句的效率

  switch 語(yǔ)句是 C 語(yǔ)言中常用的選擇語(yǔ)句, 在編譯時(shí)會(huì )產(chǎn)生if- else- if 嵌套代碼,并按照順序進(jìn)行比較,發(fā)現匹配時(shí),就跳轉到滿(mǎn)足條件的語(yǔ)句執行。

  當 switch 語(yǔ)句中的 case 標號很多時(shí),為了減少比較的次數,可以把發(fā)生頻率相對高的條件放到第一位或者把整個(gè) switch 語(yǔ)句轉化嵌套 switch 語(yǔ)句。把發(fā)生頻率高的 case 標號放在最外層的 switch 語(yǔ)句中,發(fā)生相對頻率相對低的 case 標號放在另外的 switch 語(yǔ)句中。如例 3 中,把發(fā)生率高的case 標號放在外層的 switch 語(yǔ)句中,把發(fā)生頻率低的放在缺省的(default)內層 switch 語(yǔ)句中。

  [plain] view plain copy print?

  switch (表達式)

  {

  case 值1:

  語(yǔ)句1: break;

  case 值2:

  語(yǔ)句2:break;

  ……

  /*把發(fā)生頻率低的放在內層的switch語(yǔ)句中*/

  default:

  switch (表達式)

  {

  case 值n:

  語(yǔ)句n: break;

  case 值m:

  語(yǔ)句m: break;

  ……

  }

  }

  例子3 使用嵌套switch語(yǔ)句提高程序執行效率。

  9、避免使用標準庫

  使用 C語(yǔ)言標準庫可以加快開(kāi)發(fā)進(jìn)度,但由于標準庫需要設法處理用戶(hù)所有可能遇到的情況,所以很多標準庫代碼很大。比如標準庫中的 sprintf函數非常大。這個(gè)龐大的代碼中有很大一部分用于處理浮點(diǎn)數,如果程序中不需要格式化浮點(diǎn)數值( 如%f),程序設計人員就可以根據實(shí)際情況用少量的代碼實(shí)現這個(gè)功能。

  10、采用數學(xué)方法優(yōu)化程序

  數學(xué)是計算機之母,沒(méi)有數學(xué)的依據和基礎,就沒(méi)有計算機的發(fā)展,所以在編寫(xiě)程序的時(shí)候,采用一些數學(xué)方法會(huì )對程序的執行效率有數量級的提高。有時(shí)候這個(gè)問(wèn)題常常被大家忽略, 對于沒(méi)有經(jīng)驗的程序員來(lái)說(shuō)更是如此。例如:求 1~100 的和:

  sum = 100*(100+1)/2;

  數學(xué)公式: (a1 + an)*n/2

  使用C語(yǔ)言的位操作可以減少除法和取模的運算。在計算機程序中數據的位是可以操作的最小數據單位,理論上可以用“位運算”來(lái)完成所有的運算和操作。因而,靈活的位操作可以有效地提高程序運行的效率。比如用用位操作區代替除法:比如:128 / 8 ->> 128 >> 3;

  優(yōu)化算法和數據結構對提高代碼的效率有很大的幫助。當然有時(shí)候時(shí)間效率和空間效率是對立的,此時(shí)應分析哪個(gè)更重要, 做出適當的折中。另外,在進(jìn)行優(yōu)化的時(shí)候不要片面的追求緊湊的代碼,因為緊湊的代碼并不能產(chǎn)生高效率的機器碼。

  11、存儲器分配

  由于成本限制,嵌入式系統存儲器容量有限。程序中所有的變量,包含的庫函數以及堆棧等都使用有限的內存:全局變量在整個(gè)程序范圍內都有效。程序執行完后才會(huì )釋放;靜態(tài)變量的作用范圍也是整個(gè)程序,只有局部變量中的動(dòng)態(tài)變量在函數執行完后會(huì )釋放。因此, 在程序中應盡量使用局部變量,提高內存使用效率。程序中堆的大小受限于所有全局數據和?臻g都分配后的剩余量,如果堆太小,程序不能夠在需要的時(shí)候分配內存。因此在使用 malloc 函數申請內存之后一定要用 free 函數進(jìn)行釋放, 防止內存泄露。

  12、選擇好的無(wú)限循環(huán)

  在編程中,我們常常需要用到無(wú)限循環(huán),常用的兩種方法是while (1) 和 for (;;)。這兩種方法效果完全一樣,但那一種更好呢?然我們看看它們編譯后的代碼:

  編譯前:

  while (1);

  編譯后:

  mov eax,1

  test eax,eax

  je foo+23h

  jmp foo+18h

  編譯前:

  for (;;);

  編譯后:

  jmp foo+23h

  顯然,for (;;)指令少,不占用寄存器,而且沒(méi)有判斷,跳轉,比while (1)好。

  13、使用Memoization,以避免遞歸重復計算

  考慮Fibonacci(斐波那契)問(wèn)題,Fibonacci問(wèn)題是可以通過(guò)簡(jiǎn)單的遞歸方法來(lái)解決:

  [plain] view plain copy print?

  1. int fib ( n )

  2. {

  3. if ( n == 0 || n == 1 )

  4. {

  5. return 1;

  6. }

  7. else

  8. {

  9. return fib( n - 2 ) + fib ( n - 1 );

  10. }

  11. }

  注:在這里,我們考慮Fibonacci 系列從1開(kāi)始,因此,該系列看起來(lái):1,1,2,3,5,8,…

  注意:從遞歸樹(shù),我們計算fib(3)函數2次,fib(2)函數3次。這是相同函數的重復計算。如果n非常大,fib函數的效率會(huì )比較低。Memoization是一個(gè)簡(jiǎn)單的技術(shù),可以被用在遞歸,加強計算速度。fibonacci 函數Memoization的代碼如下:

  [plain] view plain copy print?

  1. int calc_fib ( int n )

  2. {

  3. int val[ n ] , i;

  4. for ( i = 0; i <=n; i++ )

  5. {

  6. val[ i ] = -1; // Value of the first n + 1 terms of the fibonacci terms set to -1

  7. }

  8. val[ 0 ] = 1; // Value of fib ( 0 ) is set to 1

  9. val[ 1 ] = 1; // Value of fib ( 1 ) is set to 1

  10. return fib( n , val );

  11. }

  12.

  13. int fib( int n , int* value )

  14. {

  15. if ( value[ n ] != -1 )

  16. {

  17. return value[ n ]; // Using memoization

  18. }

  19. else

  20. {

  21. value[ n ] = fib( n - 2 , value ) + fib ( n - 1 , value ); // Computing the fibonacci term

  22. }

  23. return value[ n ]; // Returning the value

  24. }

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

  嵌入式C語(yǔ)言簡(jiǎn)介

  簡(jiǎn)單地說(shuō),嵌入式系統集系統的應用軟件與硬件于一體,類(lèi)似于 PC 中 BIOS 的工作方式,具有軟件代碼小、高度自動(dòng)化、響應速度快等特點(diǎn),特別適合于要求實(shí)時(shí)和多任務(wù)的體系。嵌入式系統主要由嵌入式處理器、相關(guān)支撐硬件、嵌入式操作系統及應用軟件系統等組成,它是可獨立工作的“器件”。

  嵌入式系統幾乎包括了生活中的所有電器設備,如掌上 PDA 、移動(dòng)計算設備、電視機頂盒、手機上網(wǎng)、數字電視、多媒體、汽車(chē)、微波爐、數字相機、家庭自動(dòng)化系統、電梯、空調、安全系統、自動(dòng)售貨機、蜂窩式電話(huà)、消費電子設備、工業(yè)自動(dòng)化儀表與醫療儀器等。

  嵌入式系統的硬件部分,包括處理器 / 微處理器、存儲器及外設器件和 I/O 端口、圖形控制器等。嵌入式系統有別于一般的計算機處理系統,它不具備像硬盤(pán)那樣大容量的存儲介質(zhì),而大多使用 EPROM 、 EEPROM 或閃存 (Flash Memory) 作為存儲介質(zhì)。軟件部分包括操作系統軟件 ( 要求實(shí)時(shí)和多任務(wù)操作 ) 和應用程序編程。應用程序控制著(zhù)系統的運作和行為;而操作系統控制著(zhù)應用程序編程與硬件的交互作用。 據不完全統計,目前全世界嵌入式處理器的品種總量已經(jīng)超過(guò) 1000 種,流行的體系結構有 30 多個(gè)系列。其中 8051 體系占多半,生產(chǎn)這種單片機的半導體廠(chǎng)家有 20 多個(gè),共 350 多種衍生產(chǎn)品,僅 Philips 就有近 100 種,F在幾乎每個(gè)半導體制造商都生產(chǎn)嵌入式處理器,越來(lái)越多的公司有自己的處理器設計部門(mén)。嵌入式處理器的尋址空間一般從 64kB 到 16MB ,處理速度為 0.1~2000MIPS ,常用封裝 8~144 個(gè)引腳。

  根據現狀,嵌入式計算機可分成下面幾類(lèi)。

  (1) 嵌入式微處理器 (Embedded Microprocessor Unit, EMPU)

  嵌入式微處理器采用“增強型”通用微處理器。由于嵌入式系統通常應用于環(huán)境比較惡劣的環(huán)境中,因而嵌入式微處理器在工作溫度、電磁兼容性以及可靠性方面的要求較通用的標準微處理器高。但是,嵌入式微處理器在功能方面與標準的微處理器基本上是一樣的。根據實(shí)際嵌入式應用要求,將嵌入式微處理器裝配在專(zhuān)門(mén)設計的主板上,只保留和嵌入式應用有關(guān)的主板功能,這樣可以大幅度減小系統的體積和功耗。和工業(yè)控制計算機相比,嵌入式微處理器組成的系統具有體積小、重量輕、成本低、可靠性高的優(yōu)點(diǎn),但在其電路板上必須包括 ROM 、 RAM 、總線(xiàn)接口、各種外設等器件,從而降低了系統的可靠性,技術(shù)保密性也較差。由嵌入式微處理器及其存儲器、總線(xiàn)、外設等安裝在一塊電路主板上構成一個(gè)通常所說(shuō)的單板機系統。嵌入式處理器目前主要有 Am186/88 、 386EX 、 SC-400 、 Power PC 、 68000 、 MIPS 、 ARM 系列等。

  (2) 嵌入式微控制器 (Microcontroller Unit, MCU) (3) 嵌入式 DSP 處理器 (Embedded Digital Signal Processor, EDSP (4) 嵌入式片上系統 (System On Chip, SOC)

  隨著(zhù) EDI 的推廣和 VLSI 設計的普及化,以及半導體工藝的迅速發(fā)展,可以在一塊硅片上實(shí)現一個(gè)更為復雜的系統,這就產(chǎn)生了 SOC 技術(shù)。各種通用處理器內核將作為 SOC 設計公司的標準庫,和其他許多嵌入式系統外設一樣,成為 VLSI 設計中一種標準的器件,用標準的 VHDL 、 Verlog 等硬件語(yǔ)言描述,存儲在器件庫中。用戶(hù)只需定義出其整個(gè)應用系統,仿真通過(guò)后就可以將設計圖交給半導體工廠(chǎng)制作樣品。這樣除某些無(wú)法集成的器件以外,整個(gè)嵌入式系統大部分均可集成到一塊或幾塊芯片中去,應用系統電路板將變得很簡(jiǎn)單,對于減小整個(gè)應用系統體積和功耗、提高可靠性非常有利。 SOC 可分為通用和專(zhuān)用兩類(lèi),通用 SOC 如 Infineon(Siemens) 的 TriCore 、 Motorola 的 M-Core ,以及某些 ARM 系列器件,如 Echelon 和 Motorola 聯(lián)合研制的 Neuron 芯片等;專(zhuān)用 SOC 一般專(zhuān)用于某個(gè)或某類(lèi)系統中,如 Philips 的 Smart XA ,它將 XA 單片機內核和支持超過(guò) 2048 位復雜 RSA 算法的 CCU 單元制作在一塊硅片上,形成一個(gè)可加載 Java 或 C 語(yǔ)言的專(zhuān)用 SOC ,可用于互聯(lián)網(wǎng)安全方面。

  嵌入式操作系統是一種支持嵌入式系統應用的操作系統軟件,它是嵌入式系統 ( 包括硬、軟件系統 ) 極為重要的組成部分,通常包括與硬件相關(guān)的底層驅動(dòng)軟件、系統內核、設備驅動(dòng)接口、通信協(xié)議、圖形界面、標準化瀏覽器等 Browser 。嵌入式操作系統具有通用操作系統的基本特點(diǎn),如能夠有效管理越來(lái)越復雜的系統資源;能夠把硬件虛擬化,使得開(kāi)發(fā)人員從繁忙的驅動(dòng)程序移植和維護中解脫出來(lái);能夠提供庫函數、驅動(dòng)程序、工具集以及應用程序 。與通用操作系統相比較,嵌入式操作系統在系統實(shí)時(shí)高效性、硬件的相關(guān)依賴(lài)性、軟件固態(tài)化以及應用的專(zhuān)用性等方面具有較為突出的特點(diǎn)。

  1. 嵌入式操作系統的種類(lèi)

  一般情況下,嵌入式操作系統可以分為兩類(lèi),一類(lèi)是面向控制、通信等領(lǐng)域的實(shí)時(shí)操作系統,如 WindRiver 公司的 VxWorks 、 ISI 的 pSOS 、 QNX 系統軟件公司的 QNX 、 ATI 的 Nucleus 等;另一類(lèi)是面向消費電子產(chǎn)品的非實(shí)時(shí)操作系統,這類(lèi)產(chǎn)品包括個(gè)人數字助理 (PDA) 、移動(dòng)電話(huà)、機頂盒、電子書(shū)、 WebPhone 等。

  a. 非實(shí)時(shí)操作系統

  早期的嵌入式系統中沒(méi)有操作系統的概念,程序員編寫(xiě)嵌入式程序通常直接面對裸機及裸設備。在這種情況下,通常把嵌入式程序分成兩部分,即前臺程序和后臺程序。前臺程序通過(guò)中段來(lái)處理事件,其結構一般為無(wú)限循環(huán);后臺程序則掌管整個(gè)嵌入式系統軟、硬件資源的分配、管理以及任務(wù)的調度,是一個(gè)系統管理調度程序。這就是通常所說(shuō)的前后臺系統。一般情況下,后臺程序也叫任務(wù)級程序,前臺程序也叫事件處理級程序。在程序運行時(shí),后臺程序檢查每個(gè)任務(wù)是否具備運行條件,通過(guò)一定的調度算法來(lái)完成相應的操作。對于實(shí)時(shí)性要求特別嚴格的操作通常由中斷來(lái)完成,僅在中斷服務(wù)程序中標記事件的發(fā)生,不再做任何工作就退出中斷,經(jīng)過(guò)后臺程序的調度,轉由前臺程序完成事件的處理,這樣就不會(huì )造成在中斷服務(wù)程序中處理費時(shí)的事件而影響后續和其他中斷。

  實(shí)際上,前后臺系統的實(shí)時(shí)性比預計的要差。這是因為前后臺系統認為所有的任務(wù)具有相同的優(yōu)先級別,即是平等的,而且任務(wù)的執行又是通過(guò) FIFO 隊列排隊,因而對那些實(shí)時(shí)性要求高的任務(wù)不可能立刻得到處理。另外,由于前臺程序是一個(gè)無(wú)限循環(huán)的結構,一旦在這個(gè)循環(huán)體中正在處理的任務(wù)崩潰,使得整個(gè)任務(wù)隊列中的其他任務(wù)得不到機會(huì )被處理,從而造成整個(gè)系統的崩潰。由于這類(lèi)系統結構簡(jiǎn)單,幾乎不需要 RAM/ROM 的額外開(kāi)銷(xiāo),因而在簡(jiǎn)單的嵌入式應用被廣泛使用。

  b. 實(shí)時(shí)操作系統

  實(shí)時(shí)系統是指能在確定的時(shí)間內執行其功能并對外部的異步事件做出響應的計算機系統。其操作的正確性不僅依賴(lài)于邏輯設計的正確程度,而且與這些操作進(jìn)行的時(shí)間有關(guān)!霸诖_定的時(shí)間內”是該定義的核心。也就是說(shuō),實(shí)時(shí)系統是對響應時(shí)間有嚴格要求的。

  實(shí)時(shí)系統對邏輯和時(shí)序的要求非常嚴格,如果邏輯和時(shí)序出現偏差將會(huì )引起嚴重后果。實(shí)時(shí)系統有兩種類(lèi)型:軟實(shí)時(shí)系統和硬實(shí)時(shí)系統。軟實(shí)時(shí)系統僅要求事件響應是實(shí)時(shí)的,并不要求限定某一任務(wù)必須在多長(cháng)時(shí)間內完成;而在硬實(shí)時(shí)系統中,不僅要求任務(wù)響應要實(shí)時(shí),而且要求在規定的時(shí)間內完成事件的處理。通常,大多數實(shí)時(shí)系統是兩者的結合。實(shí)時(shí)應用軟件的設計一般比非實(shí)時(shí)應用軟件的設計困難。實(shí)時(shí)系統的技術(shù)關(guān)鍵是如何保證系統的實(shí)時(shí)性。

  實(shí)時(shí)多任務(wù)操作系統是指具有實(shí)時(shí)性、能支持實(shí)時(shí)控制系統工作的操作系統。其首要任務(wù)是調度一切可利用的資源完成實(shí)時(shí)控制任務(wù),其次才著(zhù)眼于提高計算機系統的使用效率,重要特點(diǎn)是要滿(mǎn)足對時(shí)間的限制和要求。實(shí)時(shí)操作系統具有如下功能:任務(wù)管理 ( 多任務(wù)和基于優(yōu)先級的任務(wù)調度 ) 、任務(wù)間同步和通信 ( 信號量和郵箱等 ) 、存儲器優(yōu)化管理 ( 含 ROM 的管理 ) 、實(shí)時(shí)時(shí)鐘服務(wù)、中斷管理服務(wù)。實(shí)時(shí)操作系統具有如下特點(diǎn):規模小,中斷被屏蔽的時(shí)間很短,中斷處理時(shí)間短,任務(wù)切換很快。

  實(shí)時(shí)操作系統可分為可搶占型和不可搶占型兩類(lèi)。對于基于優(yōu)先級的系統而言,可搶占型實(shí)時(shí)操作系統是指內核可以搶占正在運行任務(wù)的 CPU 使用權并將使用權交給進(jìn)入就緒態(tài)的優(yōu)先級更高的任務(wù),是內核搶了 CPU 讓別的任務(wù)運行。不可搶占型實(shí)時(shí)操作系統使用某種算法并決定讓某個(gè)任務(wù)運行后,就把 CPU 的控制權完全交給了該任務(wù),直到它主動(dòng)將 CPU 控制權還回來(lái)。中斷由中斷服務(wù)程序來(lái)處理,可以激活一個(gè)休眠態(tài)的任務(wù),使之進(jìn)入就緒態(tài);而這個(gè)進(jìn)入就緒態(tài)的任務(wù)還不能運行,一直要等到當前運行的任務(wù)主動(dòng)交出 CPU 的控制權。使用這種實(shí)時(shí)操作系統的實(shí)時(shí)性比不使用實(shí)時(shí)操作系統的系統性能好,其實(shí)時(shí)性取決于最長(cháng)任務(wù)的執行時(shí)間。不可搶占型實(shí)時(shí)操作系統的缺點(diǎn)也恰恰是這一點(diǎn),如果最長(cháng)任務(wù)的執行時(shí)間不能確定,系統的實(shí)時(shí)性就不能確定。

  可搶占型實(shí)時(shí)操作系統的實(shí)時(shí)性好,優(yōu)先級高的任務(wù)只要具備了運行的條件,或者說(shuō)進(jìn)入了就緒態(tài),就可以立即運行。也就是說(shuō),除了優(yōu)先級最高的任務(wù),其他任務(wù)在運行過(guò)程中都可能隨時(shí)被比它優(yōu)先級高的任務(wù)中斷,讓后者運行。通過(guò)這種方式的任務(wù)調度保證了系統的實(shí)時(shí)性,但是,如果任務(wù)之間搶占 CPU 控制權處理不好,會(huì )產(chǎn)生系統崩潰、死機等嚴重后果。

  2. 嵌入式操作系統的發(fā)展

  嵌入式操作系統伴隨著(zhù)嵌入式系統的發(fā)展經(jīng)歷了 4 個(gè)比較明顯的階段。

  第一階段是無(wú)操作系統的嵌入算法階段,是以單芯片為核心的可編程控制器形式的系統,同時(shí)具有與監測、伺服、指示設備相配合的功能。這種系統大部分應用于一些專(zhuān)業(yè)性極強的工業(yè)控制系統中,一般沒(méi)有操作系統的支持,通過(guò)匯編語(yǔ)言編程對系統進(jìn)行直接控制,運行結束后清除內存。這一階段系統的主要特點(diǎn)是:系統結構和功能都相對單一,處理效率較低,存儲容量較小,幾乎沒(méi)有用戶(hù)接口。由于這種嵌入式系統使用簡(jiǎn)便、價(jià)格很低,以前在國內工業(yè)領(lǐng)域應用較為普遍,但是已經(jīng)遠遠不能適應高效的、需要大容量存儲介質(zhì)的現代化工業(yè)控制和新興的信息家電等領(lǐng)域的需求。

  第二階段是以嵌入式 CPU 為基礎、以簡(jiǎn)單操作系統為核心的嵌入式系統。這一階段系統的主要特點(diǎn)是: CPU 種類(lèi)繁多,通用性比較差;系統開(kāi)銷(xiāo)小, 效率高;一般配備系統仿真器,操作系統具有一定的兼容性和擴展性;應用軟件較專(zhuān)業(yè),用戶(hù)界面不夠友好;系統主要用來(lái)控制系統負載以及監控應用程序運行。

  第三階段是通用的嵌入式實(shí)時(shí)操作系統階段,是以嵌入式操作系統為核心的嵌入式系統。這一階段系統的主要特點(diǎn)是:嵌入式操作系統能運行于各種不同類(lèi)型的微處理器上,兼容性好;操作系統內核精小、效率高,并且具有高度的模塊化和擴展性;具備文件和目錄管理、設備支持、多任務(wù)、網(wǎng)絡(luò )支持、圖形窗口以及用戶(hù)界面等功能;具有大量的應用程序接口 (API) ,開(kāi)發(fā)應用程序簡(jiǎn)單;嵌入式應用軟件豐富。

  第四階段是以基于 Internet 為標志的嵌入式系統,這是一個(gè)正在迅速發(fā)展的階段。目前大多數嵌入式系統還孤立于 Internet 之外,但隨著(zhù) Internet 的發(fā)展以及 Internet 技術(shù)與信息家電、工業(yè)控制技術(shù)等結合日益密切,嵌入式設備與 Internet 的結合將代表著(zhù)嵌入式技術(shù)的真正未來(lái)。

  3. 使用實(shí)時(shí)操作系統的必要性

  嵌入式實(shí)時(shí)操作系統在目前的嵌入式應用中用得越來(lái)越廣泛,尤其在功能復雜、系統龐大的應用中顯得愈來(lái)愈重要。

  首先,嵌入式實(shí)時(shí)操作系統提高了系統的可靠性。在控制系統中,出于安全方面的考慮,要求系統起碼不能崩潰,而且還要有自愈能力。不僅要求在硬件設計方面提高系統的可靠性和抗干擾性,而且也應在軟件設計方面提高系統的抗干擾性,盡可能地減少安全漏洞和不可靠的隱患。長(cháng)期以來(lái)的前后臺系統軟件設計在遇到強干擾時(shí),使得運行的程序產(chǎn)生異常、出錯、跑飛,甚至死循環(huán),造成了系統的崩潰。而實(shí)時(shí)操作系統管理的系統,這種干擾可能只是引起若干進(jìn)程中的一個(gè)被破壞,可以通過(guò)系統運行的系統監控進(jìn)程對其進(jìn)行修復。通常情況下,這個(gè)系統監視進(jìn)程用來(lái)監視各進(jìn)程運行狀況,遇到異常情況時(shí)采取一些利于系統穩定可靠的措施,如把有問(wèn)題的任務(wù)清除掉。從某種意義上說(shuō),沒(méi)有操作系統的計算機 ( 裸機 ) 是沒(méi)有用的。在嵌入式應用中,只有把 CPU 嵌入到系統中,同時(shí)又把操作系統嵌入進(jìn)去,才是真正的計算機嵌入式應用。

  4. 實(shí)時(shí)操作系統的優(yōu)缺點(diǎn)

  在嵌入式實(shí)時(shí)操作系統環(huán)境下開(kāi)發(fā)實(shí)時(shí)應用程序使程序的設計和擴展變得容易,不需要大的改動(dòng)就可以增加新的功能。通過(guò)將應用程序分割成若干獨立的任務(wù)模塊,使應用程序的設計過(guò)程大為簡(jiǎn)化;而且對實(shí)時(shí)性要求苛刻的事件都得到了快速、可靠的處理。通過(guò)有效的系統服務(wù),嵌入式實(shí)時(shí)操作系統使得系統資源得到更好的利用。

【嵌入式C語(yǔ)言?xún)?yōu)化技巧】相關(guān)文章:

嵌入式C語(yǔ)言?xún)?yōu)化小技巧09-09

C語(yǔ)言?xún)?yōu)化小技巧10-04

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

嵌入式c語(yǔ)言調試開(kāi)關(guān)的技巧10-21

c語(yǔ)言?xún)?yōu)化階段07-11

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

嵌入式C語(yǔ)言編程小知識12-20

嵌入式C語(yǔ)言編程知識總結06-04

一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看