中文字幕无码不卡一区二区三区_少妇被又大又粗又爽毛片久久黑人_91精品国产在热久久无毒不卡_久久久久久亚洲综合网站

技術(shù)熱線: 4007-888-234
設(shè)計開發(fā)

專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

開發(fā)工具

提供開發(fā)工具、應(yīng)用測試 完善的開發(fā)代碼案例庫分享

技術(shù)支持

從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶產(chǎn)品競爭力

新聞中心

提供最新的單片機(jī)資訊,行業(yè)消息以及公司新聞動態(tài)

單片機(jī)與嵌入式系統(tǒng)中的并發(fā)和中斷

更新時間: 2019-10-18
閱讀量:2752

在本文中,我們將介紹并發(fā)的概念以及許多單片機(jī)提供的用于處理并發(fā)的機(jī)制,專業(yè)術(shù)語稱為“中斷”。下面我們將介紹這些概念的基本定義,并思考它們與單片機(jī)代碼之間的關(guān)系。

一、什么是并發(fā)?

以生活中的示例來解釋并發(fā)性。通常,當(dāng)你上床睡覺時,你希望在特定時間醒來。你在這里有兩個目標(biāo):上床睡覺以便休息,同時也要確保在起床時間別又睡著了。

introduction.jpg

確保你不會錯過起床時間的一種方法是保持清醒狀態(tài)并觀看時鐘,但這將使你無法上床睡覺。為了解決這個問題,我們通常使用鬧鐘在特定時間喚醒我們,這樣我們就可以專注于睡眠并且仍然達(dá)到喚醒的目標(biāo)。

并發(fā)是我們用于描述場景的術(shù)語,當(dāng)你有兩個或兩個以上的流程同時參加,但在任何時間點只能物理處理一個流程。

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

通常,我們只對與我們正在參與的流程相關(guān)的特定事件感興趣。正如你在上面注意到的,從時間角度來看,我們關(guān)心的唯一事件是是否該醒了。解決并發(fā)的典型方法是讓另一個物理資源(鬧鐘或人)監(jiān)視我們感興趣的事件,然后提醒(或中斷)該事件已發(fā)生的事實,以便我們可以進(jìn)行處理。

二、單片機(jī)和網(wǎng)絡(luò)物理系統(tǒng)中的并發(fā)

單片機(jī)和網(wǎng)絡(luò)物理系統(tǒng)通常必須處理并發(fā)性。實際應(yīng)用中的一個例子是微波爐。該設(shè)備需要能夠處理食物加熱過程中按下按鈕或檢測你何時打開門。按下暫?;蛉∠粹o或打開門會使食物停止加熱。

單片機(jī)在設(shè)計時都會考慮并發(fā)性。除了通用CPU外,它們還包含許多用于與外界交互的專用硬件設(shè)備(稱為外圍設(shè)備),因此你可以連接諸如按鈕和顯示器之類的東西以及實現(xiàn)系統(tǒng)所需的其他外部硬件。通常,這些外設(shè)具有中斷機(jī)制,因此CPU可以要求它們監(jiān)視特定事件,然后在該事件發(fā)生時中斷CPU。

三、更高級別的中斷和并發(fā)程序概述

單片機(jī)上的中斷的工作方式與前面討論的睡眠和鬧鐘示例相同。

你可以編寫一個配置外設(shè)以監(jiān)視某個事件并在該事件發(fā)生時中斷CPU的程序,例如,當(dāng)GPIO輸入值從0到1時。在程序運(yùn)行時,CPU執(zhí)行你的程序段。主程序。當(dāng)你正在等待的事件發(fā)生時,外圍設(shè)備會向CPU發(fā)出事件已發(fā)生的信號。如果一切配置正確,CPU將停止在主程序中執(zhí)行的操作,執(zhí)行一個稱為中斷服務(wù)程序(ISR)或中斷處理程序的特殊功能,然后返回主程序以從中斷處繼續(xù)執(zhí)行。完成時。

你必須將ISR編寫為代碼的一部分。假設(shè)你正在使用C編寫程序,這意味著你必須在將作為單片機(jī)將運(yùn)行的可執(zhí)行文件的一部分構(gòu)建的源代碼中的某個地方聲明和定義它。

但是,你自己不會呼叫ISR。所有單片機(jī)開發(fā)工具都有一種特定的方式讓你告訴C編譯器某個功能是一個ISR,以及它與哪個特定中斷相關(guān)聯(lián)。一旦正確完成此操作,當(dāng)發(fā)生特定中斷時,CPU將自動跳轉(zhuǎn)至該功能并執(zhí)行。

C代碼中斷示例

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

下圖詳細(xì)介紹了用C語言編寫的具有ISR的代碼如何操作,以幫助提供一種思考并發(fā)程序的好方法,假定所有中斷配置均正確完成。

introduction-to.jpg

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)。

罗城| 洪洞县| 乐陵市| 邵阳县| 清涧县| 绥德县| 武夷山市| 阿巴嘎旗| 阿坝县| 银川市| 黄石市| 清水河县| 香港| 南丰县| 桂阳县| 无锡市| 买车| 永寿县| 牟定县| 灵丘县| 长宁区| 图们市| 石台县| 无为县| 沿河| 平乡县| 潼南县| 襄樊市| 陈巴尔虎旗| 昂仁县| 克什克腾旗| 屏边| 隆昌县| 安仁县| 达日县| 新源县| 安丘市| 鄯善县| 平阳县| 凤山市| 扎兰屯市|