gcc-avr中中斷的寫法
Interrupts 和 Signals
詳細描述
很難找到在如何處理中斷方面達成一致的編譯器,直到C語言試著隔離硬體相關的細節,編譯器的作者才不得不設計他們自己處理中斷的方法。
在AVR_GCC環境中,向量表已經使用預先定義好的名字來標誌中斷(interrupt)路由(routines),你即使不定義也可以使用他們。
但是定義(patching)向量表只是解決這個問題的一部分。一般來說,編譯器在正常執行編譯器生成(compiler-generated)的程式碼時使用一組暫存器。這些暫存器就像狀態暫存器一樣是很重要的哦。另外我們要做的事情就是用"__attribute__((interrupt))來標記中斷處理函式。
這些細節看起來使中斷處理有一些混亂,但是所有的這些細都是被中斷API(Interrupt API)處理的。有兩個宏用來定義中斷處理函式,INTERRUPT()和SIGNAL()。這些宏用來標記你的程式碼為一箇中斷處程式,下面的例子定義了一個ADC中斷的處理程式(handler)。
#include
INTERRUPT(SIG_ADC)
{
//user code here
}
如果一個未預期的中斷產生了(終端已經產生,但是沒有對應的處理程式,通常屬於BUG),那麼預設的行為則是跳轉到reset區復位裝置。也可以用一個名為__vector_default的方法過載(override)這種處理模式,既可以用SIGNAL()宏也可以用INTERRUPT()宏定義它。
#include
SIGNAL(__vector_default)
{
/user code here
}
再下面的內容我就不翻譯了!
英文原文:
現在用的是Atmega64。中斷向量表定義在iom64.h檔案內。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/163295/viewspace-1014786/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- latex 中的 φ 寫法
- drools中then部分的寫法
- android中MK檔案的寫法Android
- Python中判斷字母大小寫常用的方法!Python
- latex 中矩陣寫法矩陣
- Python 中 Singleton 的寫法及其擴充Python
- JavaScript中更好的迴圈寫法大全JavaScript
- RN中佈局樣式的寫法
- ant design 中的 Select 元件常規寫法元件
- web工程中URL地址的推薦寫法Web
- LINUX中斷--申請中斷和解除安裝中斷Linux
- 在Js中匿名函式的幾種寫法JS函式
- oracle中if/else功能的實現的3種寫法Oracle
- 中斷和中斷處理程式
- JavaScript複雜判斷的更優雅寫法JavaScript
- JavaScript 複雜判斷的更優雅寫法JavaScript
- 中斷
- Oracle儲存過程中跳出迴圈的寫法Oracle儲存過程
- Android中點選事件的四種寫法詳解Android事件
- golang中http server.go中的testHookServerServe函式變數寫法問題GolangHTTPServerHook函式變數
- 硬中斷,軟中斷,訊號,異常
- 學會TypeScript中函式過載寫法TypeScript函式
- CSS中多個class樣式設定的不同寫法CSS
- 為什麼在vue中寫的css都沒法生效VueCSS
- latex 中乘號、恆等好、花括號的寫法
- latex 中乘號、恆等號、花括號的寫法
- 執行緒的中斷執行緒
- Java中的斷言assertJava
- 最簡潔的python條件判斷語句寫法Python
- x86架構中的外部中斷結構-Part 1:中斷控制器的演化架構
- 面試中單例模式有幾種寫法?面試單例模式
- VS Code中可要求Copilot重寫Java語法Java
- 好程式設計師分享javascript中的常見的相容寫法程式設計師JavaScript
- minos 2.4 中斷虛擬化——中斷子系統
- 原來定時器中斷是個偽中斷定時器
- python兩種簡潔的條件判斷語句寫法Python
- baremetal GPIO中斷REM
- 28388_中斷
- (13)中斷門