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