嵌入式作業系統核心原理和開發(中斷)

2021-08-26 17:29:55 字數 2009 閱讀 8902

在我個人看來,中斷是cpu最重要的特色。從某種意義上來說,沒有中斷就沒有嵌入式作業系統。一旦你明白了中斷的真正含義,你對作業系統的了解就算真正入門了。什麼是中斷呢?我們可以看看微控制器下面是怎麼做的。

#include sbit led = p1 ^ 6;

unsigned int led_enable = 0;

void delay(unsigned int a)

}void led_switch(void) interrupt 0 using 1

else

ex0 = 1;

}void main(void)}}

上面的**是一段真實的51微控制器**。它完成的功能很簡單,就是對led燈進行點亮處理。怎麼解釋呢?在微控制器上電後,我們發現一開始led二極體沒有發生閃爍。在我們單擊按鍵之後,led開始出現間隙性閃爍的現象,之後再一次單擊按鍵,又可以發現led的閃爍現象消失了。為什麼會出現這種現象?主要是因為我們單擊按鍵的時候,在微控制器的引腳處產生了中斷。檢視到中斷的微控制器此時就會跳轉到中斷向量表裡面查詢中斷處理函式。這裡的按鍵中斷處理函式就是led_switch。處理完led_switch之後,微控制器又會回到原來的main函式繼續執行,所以整個中斷的過程就像沒有發生過一樣。因為在led_switch中我們對led_enable進行了處理,所以就出現了我們在前面說過的各種現象。

說到這,也許有的朋友會說,cpu的這種中斷屬性怎麼才能在pc上面**出來呢?其實很簡單。linux系統本身就有乙個優秀的特性,那就是訊號。只要我們設定相應的訊號和處理函式,那麼linux系統就會在系統排程返回之前呼叫相應的訊號函式來處理。整個訊號處理的過程和中斷是一模一樣的。因為在處理中斷的時候,我們需要對cpu的現場進行儲存和恢復處理,而訊號的處理也是一樣。在訊號處理前,系統肯定是處於核心態,那麼linux系統肯定已經為我們做好了現場的保護工作,處理完訊號之後,系統本身又會恢復到原來的使用者態,繼續執行下面的**。所以linux自身也會預設對原來的場景進行恢復處理,就好象中斷返回一樣。

#include #include #include #include #include static int count = 0;

static struct itimerval oldtv;

void set_timer()

void signal_handler(int m)

int main()

大家可以把這樣一段**在linux編譯一下,然後使用gdb除錯即可。檢視整個signal_handler在被斷點斷住的時候,本身執行緒是不是只有乙個?函式堆疊是不是在乙個執行緒裡面。如果不出意外,整個訊號的處理過程應該是這樣的,

(gdb) bt

#0 signal_handler(m=14) at code.c: 23

#1 #2 main() at code.c:32

到了這裡,相應大家應該還有乙個疑問,既然可以利用linux的signal對cpu的中斷進行**,那麼能不能利用windows的signal對中斷進行**呢。因為windows下面的沒有sigalrm這個訊號,所以我們可以重新編寫一段**,然後利用visual studio 6.0進行編譯,看看對應的情況。

#include #include #include #include #include void signalhandler(int signal)

int main()

exit(1);

}

下面,我們首先編譯這一段**。接著在程式run之後,我們可以在signalhandler之處設定乙個斷點。一切就緒完畢,再按下ctrl+c之後,系統就會在signalhandler之處斷住。此時單擊【debug】-> 【threads】,就可以看到這個情況。

相信看到這裡,大家應該看明白了。其實在windows下面,訊號是專門有乙個執行緒來完成的,和原來的main函式不是同乙個執行緒。既然執行緒都不是一樣的,而中斷本身是必須在乙個thread中完成的。我們怎麼能利用windows來**cpu的中斷處理流程呢。

嵌入式作業系統核心原理和開發(開篇)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!作業系統是很多人每天必須打交道的東西,因為在你開啟電腦的一剎那,隨著bios自檢結束,你的windows系統已經開始執行了。如果問大家作業系統是什麼?可能有的人會說作業系統就是windows,就是那些可以放大 縮小 移動的視窗。對曾經是計算機專業的...

linux 嵌入式作業系統核心原理和開發總結

01 嵌入式作業系統核心原理和開發 優先順序的修改 02 嵌入式作業系統核心原理和開發 改進的鍊錶記憶體分配演算法 03 嵌入式作業系統核心原理和開發 等值block記憶體池設計 04 嵌入式作業系統核心原理和開發 執行緒狀態 05 嵌入式作業系統核心原理和開發 實時系統中的定時器 06 嵌入式作業...

嵌入式作業系統核心原理和開發(總結篇)

01 嵌入式作業系統核心原理和開發 優先順序的修改 02 嵌入式作業系統核心原理和開發 改進的鍊錶記憶體分配 演算法 03 嵌入式作業系統核心原理和開發 等值block記憶體池設計 04 嵌入式作業系統核心原理和開發 執行緒狀態 05 嵌入式作業系統核心原理和開發 實時系統中的定時器 06 嵌入式作...