專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命
提供開發(fā)工具、應(yīng)用測試 完善的開發(fā)代碼案例庫分享
從全面的產(chǎn)品導(dǎo)入到強大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!
提供新的芯片及解決方案,提升客戶產(chǎn)品競爭力
提供最新的單片機資訊,行業(yè)消息以及公司新聞動態(tài)
在本文中,我們將介紹并發(fā)的概念以及許多單片機提供的用于處理并發(fā)的機制,專業(yè)術(shù)語稱為“中斷”。下面我們將介紹這些概念的基本定義,并思考它們與單片機代碼之間的關(guān)系。
一、什么是并發(fā)?
以生活中的示例來解釋并發(fā)性。通常,當你上床睡覺時,你希望在特定時間醒來。你在這里有兩個目標:上床睡覺以便休息,同時也要確保在起床時間別又睡著了。
確保你不會錯過起床時間的一種方法是保持清醒狀態(tài)并觀看時鐘,但這將使你無法上床睡覺。為了解決這個問題,我們通常使用鬧鐘在特定時間喚醒我們,這樣我們就可以專注于睡眠并且仍然達到喚醒的目標。
并發(fā)是我們用于描述場景的術(shù)語,當你有兩個或兩個以上的流程同時參加,但在任何時間點只能物理處理一個流程。
在上面的示例中,需要注意的兩個過程是睡眠和跟蹤時間(因此我們在所需的時間醒來)。同一個人在同一時間不可能同時做這兩個事情。
通常,我們只對與我們正在參與的流程相關(guān)的特定事件感興趣。正如你在上面注意到的,從時間角度來看,我們關(guān)心的唯一事件是是否該醒了。解決并發(fā)的典型方法是讓另一個物理資源(鬧鐘或人)監(jiān)視我們感興趣的事件,然后提醒(或中斷)該事件已發(fā)生的事實,以便我們可以進行處理。
二、單片機和網(wǎng)絡(luò)物理系統(tǒng)中的并發(fā)
單片機和網(wǎng)絡(luò)物理系統(tǒng)通常必須處理并發(fā)性。實際應(yīng)用中的一個例子是微波爐。該設(shè)備需要能夠處理食物加熱過程中按下按鈕或檢測你何時打開門。按下暫停或取消按鈕或打開門會使食物停止加熱。
單片機在設(shè)計時都會考慮并發(fā)性。除了通用CPU外,它們還包含許多用于與外界交互的專用硬件設(shè)備(稱為外圍設(shè)備),因此你可以連接諸如按鈕和顯示器之類的東西以及實現(xiàn)系統(tǒng)所需的其他外部硬件。通常,這些外設(shè)具有中斷機制,因此CPU可以要求它們監(jiān)視特定事件,然后在該事件發(fā)生時中斷CPU。
三、更高級別的中斷和并發(fā)程序概述
單片機上的中斷的工作方式與前面討論的睡眠和鬧鐘示例相同。
你可以編寫一個配置外設(shè)以監(jiān)視某個事件并在該事件發(fā)生時中斷CPU的程序,例如,當GPIO輸入值從0到1時。在程序運行時,CPU執(zhí)行你的程序段。主程序。當你正在等待的事件發(fā)生時,外圍設(shè)備會向CPU發(fā)出事件已發(fā)生的信號。如果一切配置正確,CPU將停止在主程序中執(zhí)行的操作,執(zhí)行一個稱為中斷服務(wù)程序(ISR)或中斷處理程序的特殊功能,然后返回主程序以從中斷處繼續(xù)執(zhí)行。完成時。
你必須將ISR編寫為代碼的一部分。假設(shè)你正在使用C編寫程序,這意味著你必須在將作為單片機將運行的可執(zhí)行文件的一部分構(gòu)建的源代碼中的某個地方聲明和定義它。
但是,你自己不會呼叫ISR。所有單片機開發(fā)工具都有一種特定的方式讓你告訴C編譯器某個功能是一個ISR,以及它與哪個特定中斷相關(guān)聯(lián)。一旦正確完成此操作,當發(fā)生特定中斷時,CPU將自動跳轉(zhuǎn)至該功能并執(zhí)行。
C代碼中斷示例
由于中斷的工作方式,一開始在編程中處理并發(fā)性似乎有點不直觀。
下圖詳細介紹了用C語言編寫的具有ISR的代碼如何操作,以幫助提供一種思考并發(fā)程序的好方法,假定所有中斷配置均正確完成。
1.CPU在main函數(shù)的while循環(huán)中執(zhí)行代碼。
2.事件(從1變?yōu)?)發(fā)生在為中斷配置的引腳上。
3.CPU在while循環(huán)中停止執(zhí)行代碼,并執(zhí)行中斷服務(wù)程序。
4.完成中斷服務(wù)程序執(zhí)行后,CPU從中斷處重新開始執(zhí)行主循環(huán)。
5.CPU在while循環(huán)中執(zhí)行代碼。
6.事件再次發(fā)生。
7.CPU在while循環(huán)中停止執(zhí)行代碼,并執(zhí)行中斷服務(wù)程序。
8.完成中斷服務(wù)程序執(zhí)行后,CPU從中斷處重新開始執(zhí)行主循環(huán)。