处理器中的中断
文章目錄
- 1 中斷的概念和意義
- 1.1 中斷的概念
- 1.2 中斷的意義
- 1.3 中斷的類型
- 1.4 中斷的優(yōu)先級
- 2 中斷服務程序(ISR)
- 2.1 ISR的處理流程
- 2.2 中斷服務程序的要求
- 3 中斷的應用
- 3.1 程序斷點
- 3.2 一個工程產(chǎn)品案例的剖析
1 中斷的概念和意義
1.1 中斷的概念
中斷的概念:
- 中斷是一種處理器與外設進行通信的機制。
- 用于“通知”處理器外部有“重要事件”發(fā)生。
- 一般情況下,中斷需要被處理器響應。
1.2 中斷的意義
中斷具有如下意義:
- 應用程序不必關心中斷的發(fā)生與處理。
- 中斷服務程序不必關心應用程序的執(zhí)行狀態(tài)。
- 中斷是“上層應用”與“底層代碼”的“分割邊界”。
1.3 中斷的類型
硬中斷:
- 通過處理器中斷信號線產(chǎn)生的中斷。
軟中斷:
- 通過非法指令或特殊指令觸發(fā)的中斷。
1.4 中斷的優(yōu)先級
關于中斷優(yōu)先級:
- 多個中斷同時出現(xiàn),處理器優(yōu)先響應高優(yōu)先級的中斷。
- 低優(yōu)先級中斷的ISR執(zhí)行時,可以被高優(yōu)先級中斷再次打斷。
- ISR比App Code擁有更高的執(zhí)行優(yōu)先級。
2 中斷服務程序(ISR)
2.1 ISR的處理流程
中斷服務程序的一般處理流程:
2.2 中斷服務程序的要求
軟件工程師眼中的中斷服務程序:
- 不能有返回值,不能有參數(shù)傳遞。
- 必須短小高效,避免浮點運算。
3 中斷的應用
3.1 程序斷點
斷點的概念:
- 斷點指的是調(diào)試工具用于暫停代碼執(zhí)行的指令位置。
- 斷點的實現(xiàn)原理為處理器的中斷支持。
斷點的分類:
- 軟件斷點:利用非法指令異常產(chǎn)生中斷實現(xiàn)。
- 硬件中斷:利用中斷寄存器的特性產(chǎn)生中斷實現(xiàn)。
程序斷點的實現(xiàn)原理:
3.2 一個工程產(chǎn)品案例的剖析
背景:
- 嵌入式實時系統(tǒng)對時序的要求比較嚴格。
- 各個線程的執(zhí)行有相對嚴格的時間要求。
痛點:
- 斷點調(diào)試在嵌入式實時系統(tǒng)中不適用。
常規(guī)解決方案:日志調(diào)試法
- 在代碼中的“關鍵位置”添加打印語句。
- 打印語句盡可能詳細的打印上下文信息(函數(shù)名、局部變量等)。
- 當系統(tǒng)出現(xiàn)問題時,查看日志文件,分析系統(tǒng)。
日志調(diào)試法存在的問題:
- 不易維護
- 打印語句分散于產(chǎn)品代碼的各個角落
- 影響效率
- 過多的打印語句意味著過多的IO操作,影響產(chǎn)品的整體執(zhí)行效率
- 分析困難
- 當日志輸出量非常多的時候,很難精確定位問題
- 也許只有添加打印語句的工程師能看得懂日志輸出
一個瘋狂的想法:
- 同時結合日志調(diào)試法和斷點調(diào)試法的優(yōu)點,使得實時系統(tǒng)調(diào)試時,能夠任意查看指定代碼行上下文的信息;并且,不增加打印語句,不暫停執(zhí)行。
解決方案:
實踐結果:
- 基于ARM+Linux平臺完整實現(xiàn)。
- 通過中斷原理成功獲取上下文信息。
- 完全不影響程序的執(zhí)行時序。
- 產(chǎn)品關鍵技術點
- 中斷、ISR、編譯信息、GDB
- GUI、Socket、多線程
參考資料:
總結
- 上一篇: makefile中的函数
- 下一篇: 阅读之路