<abbr id="kc8ii"><menu id="kc8ii"></menu></abbr>
  • <input id="kc8ii"><tbody id="kc8ii"></tbody></input><table id="kc8ii"><source id="kc8ii"></source></table><kbd id="kc8ii"></kbd>
    <center id="kc8ii"><table id="kc8ii"></table></center>
  • <input id="kc8ii"></input>
    <abbr id="kc8ii"></abbr>
  • <abbr id="kc8ii"></abbr>
  • <center id="kc8ii"><table id="kc8ii"></table></center>
    <abbr id="kc8ii"></abbr>
    你的位置:首頁 > 互連技術 > 正文

    微控制器和嵌入式系統中的并發和中斷

    發布時間:2023-04-21 責任編輯:lina

    【導讀】通常,我們只對與我們正在處理的過程相關的特定事件感興趣。正如您在上面注意到的,從時間的角度來看,我們關心的事件是是否該起床了。處理并發的典型方法是讓另一個物理資源(鬧鐘或人)監視我們感興趣的事件,然后提醒(或打斷)我們事件已經發生的事實,以便我們可以處理它。


    本文是探討并發和中斷概念的系列文章中的篇。本系列的大部分內容將直接處理微控制器和 GPIO 中斷。

    在初的這篇文章中,我們將討論這些概念的基本定義,并考慮它們與為微控制器編寫代碼的相關性。

    什么是并發?

    讓我們用一個我們都熟悉的例子來談談并發。通常,當您上床睡覺時,您想在特定時間醒來。你在這里有兩個目標:上床睡覺,這樣你就可以休息,但也要確保你不會睡到你想要的起床時間。 

    確保您不會錯過起床時間的一種方法是保持清醒并看時鐘,但這會破壞您想要上床睡覺的目的。為了幫助補救這個問題,我們通常使用鬧鐘(一個設備或受信任的人,到那時已經醒了)在特定時間叫醒我們,這樣我們就可以專注于睡眠,同時仍然實現我們的目標時間。

    并發性是我們用來描述您同時處理兩個或多個進程但在任何時間點只能物理處理其中一個進程的能力的場景。 

    在上面的示例中,要注意的兩個過程是睡眠和跟蹤時間(因此我們會在所需時間醒來)。同一個人同時做這兩件事在物理上是不可能的。 

    通常,我們只對與我們正在處理的過程相關的特定事件感興趣。正如您在上面注意到的,從時間的角度來看,我們關心的事件是是否該起床了。處理并發的典型方法是讓另一個物理資源(鬧鐘或人)監視我們感興趣的事件,然后提醒(或打斷)我們事件已經發生的事實,以便我們可以處理它。

    圖 1 顯示了這方面的時間線圖解。


    微控制器和嵌入式系統中的并發和中斷
    圖 1.上床睡覺并讓鬧鐘在特定時間叫醒您的時間線圖示。


    嵌入式和網絡物理系統中的并發 

    嵌入式和網絡物理系統通常必須處理并發性。 

    這個概念的一個例子是微波爐。該設備需要能夠處理按鈕按下或檢測您在食物加熱時打開門的時間。按下暫停或取消按鈕或打開門將導致食物停止加熱。 

    微控制器——您通常將其編程為系統“大腦”的計算機——在設計時就考慮到了并發性。

    除了通用 CPU 之外,它們還包含許多用于與外界交互的專用硬件設備(稱為外圍設備),因此您可以連接諸如按鈕和顯示器之類的東西以及實現系統所需的其他外部硬件。通常,這些外設具有中斷機制,因此 CPU 可以要求它們監視特定事件,然后在該事件發生時中斷 CPU。

    中斷和并發程序的概述

    微控制器上的中斷就像我之前討論的睡眠和鬧鐘示例一樣工作。 

    您可以編寫一個程序,將外設配置為監視某個事件并在該事件發生時中斷 CPU——例如,當 GPIO 輸入值從 0 變為 1 時。當您的程序運行時,CPU 會執行您的程序片段主程序。當您等待的事件發生時,外圍設備向 CPU 發出事件已經發生的信號。如果一切配置正確,CPU 將停止它在主程序中所做的任何事情,執行一個稱為中斷服務例程 (ISR) 或中斷處理程序的特殊函數,然后返回主程序從中斷的地方繼續當它完成時。 

    您必須將 ISR 編寫為代碼的一部分。假設您正在使用 C 編寫程序,這意味著您必須在源代碼中的某處聲明和定義它,該源代碼將作為微控制器將運行的可執行文件的一部分構建。

    但是,您永遠不會自己調用 ISR。所有微控制器開發工具都有一種特定的方式讓您告訴 C 編譯器某個函數是 ISR 以及它與哪個特定中斷相關聯。正確完成此操作后,當特定中斷發生時,CPU 將自動跳轉到該函數并執行它。 

    C 代碼中的中斷示例

    由于中斷的工作方式,一開始在編程中處理并發似乎有點不直觀。

    下圖展示了用 C 語言編寫的具有 ISR 的代碼將如何運行,以幫助提供一種思考并發程序的好方法。它假定所有中斷配置都已正確完成。


    微控制器和嵌入式系統中的并發和中斷
    圖 2.帶有中斷的 C 代碼


    CPU 在 main 函數的 while 循環中執行代碼。
    感興趣的事件(從 1 變為 0)發生在為中斷配置的引腳上。
    CPU停止執行while循環中的代碼,轉而執行中斷服務程序。
    中斷服務程序執行完畢后,CPU 從中斷處繼續執行主循環。
    CPU 正在 while 循環中執行代碼。
    感興趣的事件再次發生。
    CPU停止執行while循環中的代碼,轉而執行中斷服務程序。
    中斷服務程序執行完畢后,CPU 從中斷處繼續執行主循環。

    外圍設備和 GPIO 的中斷

    本系列的大部分內容都集中在微控制器的并發和中斷概念上。接下來,我們將討論GPIO 中斷及其工作原理。 


    免責聲明:本文為轉載文章,轉載此文目的在于傳遞更多信息,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請聯系小編進行處理。


    推薦閱讀:

    海康威視發布2022年ESG報告:科技為善,助力可持續的美好未來

    如何設計簡單的電壓控制雙向電流源

    運算放大器的8種應用電路,您都了解嗎?

    打開信號繼電器的正確方式

    輕量級的電源系統,該如何設計?


    特別推薦
    技術文章更多>>
    技術白皮書下載更多>>
    熱門搜索
    ?

    關閉

    ?

    關閉

    99久久人妻无码精品系列蜜桃| 天堂无码久久综合东京热| 少妇无码太爽了不卡在线观看 | 亚洲AV人无码综合在线观看| 91久久精品无码一区二区毛片| 久久精品中文字幕久久| 久久久久综合中文字幕| 18禁无遮拦无码国产在线播放 | 国产中文字幕乱人伦在线观看 | 国产aⅴ无码专区亚洲av麻豆 | 成人无码午夜在线观看| 国产精品一级毛片无码视频| 亚洲欧美日韩在线不卡中文| 变态SM天堂无码专区| 久久国产精品无码一区二区三区 | 无码人妻精品一区二区三区99性 | 久久久久久国产精品无码超碰 | 无码中文人妻视频2019| 中文字幕欧美日韩| 痴汉中文字幕视频一区| 777久久精品一区二区三区无码| 日韩中文久久| 无码视频在线播放一二三区| 夜夜精品无码一区二区三区| 无码色AV一二区在线播放| 中文无码熟妇人妻AV在线| 亚洲中文字幕无码一去台湾| 日韩人妻无码精品一专区| 爆操夜夜操天天操狠操中文| 国产精品无码国模私拍视频| 亚洲中文字幕无码爆乳AV| 最近中文字幕完整版资源| 国产精品无码久久综合| 亚洲制服中文字幕第一区| 免费无码VA一区二区三区| 婷婷中文娱乐网开心| 日韩欧国产精品一区综合无码| 亚洲av无码国产精品色午夜字幕| 成人麻豆日韩在无码视频| 亚洲国产a∨无码中文777| 成人无码网WWW在线观看|