1. 程式人生 > >stm32學習筆記(八)中斷服務函式與函式呼叫的區別

stm32學習筆記(八)中斷服務函式與函式呼叫的區別

在《微機原理》和《計算機組成》等課程[1-4]教學中(本文以MCS-51微控制器為例),中斷過程既是教學難點又是教學重點,它與主程式呼叫子程式過程有一定相似性,但又有很大區別,呼叫子程式過程相對比較容易掌握,通過把兩過程結合起來,採用比較教學方法,能收到了很好的教學效果。 
1、兩過程定義與作用
    子程式是微機基本程式結構中的1種,基本程式結構包括順序(簡單)、分支(判斷)、迴圈、子程式和查表等5種。
    子程式是一組可以公用的指令序列,只要給出子程式的入口地址就能從主程式轉入子程式。子程式在功能上具有相對的獨立性,在執行主程式的過程中往往被多次呼叫,甚至被不同的程式所呼叫。一般微機首先執行主程式,碰到呼叫指令就轉去執行子程式,子程式執行完後,返回指令就返回主程式斷點(即呼叫指令的下一條指令),繼續執行沒有處理完的主程式,這一過程叫做(主程式)呼叫子程式過程。
子程式結構可簡化程式,防止重複書寫錯誤,並可節省記憶體空間。計算機中經常把常用的各種通用的程式段編成子程式,提供給使用者使用。使用者在自己編寫的程式中,只要會呼叫這些子程式,就可大大簡化使用者程式設計的困難。 
    中斷是計算機中央處理單元CPU與外設I/O交換資料的一種方式,除此方式外,還有無條件、條件(查詢)、存貯器直接存取DMA和I/O通道等四種方式。由於無條件不可靠,條件效率低,DMA和I/O通道兩方式硬體複雜,而中斷方式CPU效率高,因此一般大多采用中斷方式。
中斷概念是當計算機正在執行某一(主)程式時,收到一中斷請求,如果中斷響應條件成立,計算機就把正在執行的程式暫停一下,去響應處理這一請求,執行中斷服務程式,處理完服務程式後,中斷返回指令使計算機返回原來還沒有執行完的程式斷點處繼續執行,這一過程稱為中斷過程。有了中斷,計算機才能具有並行處理,實時處理和故障處理等重要功能。 
2、兩過程的聯絡與區別
2.1聯絡
    中斷與呼叫子程式兩過程屬於完全不同的概念,但它們也有不少相似之處。兩者都需要保護斷點(即下一條指令地址)、跳至子程式或中斷服務程式、保護現場、子程式或中斷處理、恢復現場、恢復斷點(即返回主程式)。兩者都可實現巢狀,即正在執行的子程式再調另一子程式或正在處理的中斷程式又被另一新中斷請求所中斷,巢狀可為多級。
正是由於這些表面上的相似處,很容易使學生把兩者混淆起來,特別是把中斷也看為子程式,這就大錯特錯了。
2.2區別
    中斷過程與呼叫子程式過程相似點是表面的,從本質上講兩者是完全不一樣的。
兩者的根本區別主要表現在服務時間
與服務物件不一樣上。首先,呼叫子程式過程發生的時間是已知和固定的,即在主程式中的呼叫指令(CALL)執行時發生主程式呼叫子程式,呼叫指令所在位置是已知和固定的。而中斷過程發生的時間一般的隨機的,CPU在執行某一主程式時收到中斷源提出的中斷申請時,就發生中斷過程,而中斷申請一般由硬體電路產生,申請提出時間是隨機的(軟中斷髮生時間是固定的),也可以說,呼叫子程式是程式設計者事先安排的,而執行中斷服務程式是由系統工作環境隨機決定的;其次,子程式完全為主程式服務的,兩者屬於主從關係,主程式需要子程式時就去呼叫子程式,並把呼叫結果帶回主程式繼續執行。而中斷服務程式與主程式兩者一般是無關的,不存在誰為誰服務的問題,兩者是平行關係;第三,主程式呼叫子程式過程完全屬於軟體
處理過程,不需要專門的硬體電路,而中斷處理系統是一個軟、硬體結合系統,需要專門的硬體電路才能完成中斷處理的過程;第四,子程式巢狀可實現若干級,巢狀的最多級數由計算機記憶體開闢的堆疊大小限制,而中斷巢狀級數主要由中斷優先順序數來決定,一般優先順序數不會很大。

相關推薦

stm32學習筆記中斷服務函式函式呼叫區別

在《微機原理》和《計算機組成》等課程[1-4]教學中(本文以MCS-51微控制器為例),中斷過程既是教學難點又是教學重點,它與主程式呼叫子程式過程有一定相似性,但又有很大區別,呼叫子程式過程相對比較容易掌握,通過把兩過程結合起來,採用比較教學方法,能收到了很好的教學效果。  1、兩過程定義與作用     子

kettle學習筆記——kettle查詢步驟連接步驟

ttl 配置 實例 nio ket 裏的 mage 2.x 步驟 一、概述    查詢步驟:    用來查詢數據源裏的數據並合並到主數據流中 。  連接步驟:    結果集通過關鍵字進行連接 。(與前面的UNION不同) 二、查詢步驟   1.流查詢        流查詢示

Linux學習筆記3linux服務管理啟停

重啟 禁用 multi etc 刪除服務 shel ive 系統 運行級別 一、LINUX 系統服務管理 1、RHEL/OEL 6.X及之前   service命令用於對系統服務進行管理,比如啟動(start)、停止(stop)、重啟(restart)、查看狀態(statu

菜鳥stm32學習筆記1系統時鐘初始化函式

系統初始化函式步驟: 1:復位並配置暫存器向量表。 2:置位CR第十六位,開啟外部振盪器。 3:檢測CR第十七位,判斷外部振盪器是否準備就緒。若就緒,硬體會置位十七位。 *2和3設定的均是時鐘控制暫存器。 4:設定時鐘配置暫存器CFGR的8-10位為100使得APB1的時鐘

嵌入式核心及驅動開發之學習筆記 阻塞模式+中斷實現讀取資料

目前已經學習兩種應用層IO模型的使用 非阻塞:立即返回結果,如果想得到期望的結果,要不停的呼叫這個方法(輪詢),非常耗費資源 阻塞:沒有得到真正的資料前,不返回結果。此時,程序進入阻塞(休眠)態,直到有資料喚醒程序,這個過程不耗資源。 PS:linux應用中,大部分的函式介面都是阻塞

學習筆記程序服務

程序 上次說到了執行緒和多執行緒之間的通訊方式,這次我們學習多程序。 Android每個程式的執行都會自動建立一個程序,程序名會以包名命名。程序是系統進行資源分配和排程的基本單位,形象的來說就是,一個車間就是一個程序,一個程序中可以有多個執行緒,一個車間可以

機器學習筆記非線性變換

nbsp 線性 logs 等於 線性模型 images http 自己 空間 一、非線性問題 對於線性不可分的數據資料,用線性模型分類,Ein會很大,相應的Ein=Eout的情況下,Eout也會很大,導致模型表現不好,此時應用非線性模型進行分類,例如: 分類器模型是一個圓

匯編入門學習筆記 —— 轉移指令

無條件轉移 fse ear tom 內存 star space off 編譯器 瘋狂的暑假學習之 匯編入門學習筆記 (八)—— 轉移指令 參考: 《匯編語言》 王爽 第9章 能夠改動ip或者同一時候改動cs和ip的指令統稱

《Linux內核設計實現》讀書筆記- 中斷下半部的處理

sym dmesg 重新編譯 warn dad style lsp 之前 res 在前一章也提到過,之所以中斷會分成上下兩部分,是由於中斷對時限的要求非常高,需要盡快的響應硬件。 主要內容: 中斷下半部處理 實現中斷下半部的機制 總結中斷下半部的實現 中斷實現

流暢的python和cookbook學習筆記

不可變 pri 列表 改變 如果 book 影響 color print 1.函數的默認參數必須不可變   如果函數的默認參數為可變的對象,那麽默認參數在函數外被修改也會影響到函數本身的。 >>> def spam(a, b=None): # b要為不

Python學習筆記

base 函數式編程 輸出 必須 返回 叠代 use map 作用 一、變量可以指向一個函數   a = abs 二、通過調用指向函數的變量可以執行該函數   a = abs  a(-10) 三、指向函數的變量可以作為參數傳遞給一個函數   def add(x,y,f): 

EF學習筆記:更新關聯數據

tro rop es2017 net sage red ida string entity 學習筆記主目錄鏈接:ASP.NET MVC5 及 EF6 學習筆記 - (目錄整理) 上一篇鏈接:EF學習筆記(七):讀取關聯數據 本篇原文鏈接:Updating Related D

python學習筆記面向對象擴展

archive ive 解釋 alt bound take src pri 執行 原鏈:http://www.cnblogs.com/vamei/archive/2012/06/02/2532018.html 筆記:今天的內容感覺自己理解不太容易 1 #昨天學習定義m

java學習筆記:繼承

this關鍵字 log implement java學習 方式 show 使用 類型 多繼承 繼承 子類擁有父類非private的屬性,方法。 子類可以擁有自己的屬性和方法,即子類可以對父類進行擴展。 子類可以用自己的方式實現父類的方法。 Java的繼承

Java框架spring Boot學習筆記:Spring相關概念

擴展 靜態 輕量級 想要 spring配置 核心 使用 oot 調用方法 Spring是開源、輕量級、一站式框架。 Spring核心主要兩部分 aop:面向切面編程,擴展功能不是修改源代碼實現 ioc:控制反轉,比如一個類,在類裏面有方法(不是靜態的方法),想要調用類

Ionic3學習筆記使iOS端、Android端 Navbar 透明化

href 添加 down nic ionic navbar str div 學習 本文為原創文章,轉載請標明出處 若要使iOS端 Navbar 透明,只需要給 ion-navbar 添加 transparent 屬性,但是Android端依舊會有一條border在,所以再給

python學習筆記之運算符

技術 ima 學習 表達式 water nag proc 說明 ddc python學習筆記(八)之運算符 算術運算符 比較運算符 邏輯運算符(1)布爾運算(2)復雜的布爾表達式 說明:以上內容摘自《跟老齊學python》python學習筆記(八)之運算符

【大話存儲】學習筆記,數據保護

clip 調度員 系統管 區域 工具 管理軟件 安裝 inf 利用 第一章 數據保護 所謂數據保護是指對當前位置上的數據進行備份,不一定是實時的。這樣帶來的好處是如果發生磁盤損壞或者說被修改了,可以通過備份數據找回 1.1 文件級備份 文件級備份:將磁盤上所有文件通過調用文

day5-Python學習筆記內置函數

lte lis map 真的 數據類型 小白 十進制 list all #函數即變量# len type print input str# print(all([1, 2, 3, 4])) # 判斷可叠代的對象裏面的值是否都為真# print(any([0, 1, 2,

《Qt5 開發實例第三版學習筆記

nbsp font public insert enter body win parent hbox 1 // 3.3 堆棧窗體 QStackedWidget類 2 //stackdlg.h 3 #ifndef STACKDLG_H 4 #define STACK