中斷函數(shù)注意什么 中斷入口函數(shù)和中斷處理函數(shù)有什么區(qū)別?
中斷入口函數(shù)和中斷處理函數(shù)有什么區(qū)別?中斷輸入函數(shù)是進(jìn)入中斷地址的輸入向量,中斷處理函數(shù)是響應(yīng)中斷,執(zhí)行中斷程序,輸出結(jié)果,達(dá)到處理突發(fā)事件的目的。中斷函數(shù)注意點(diǎn)?1. 中斷處理函數(shù)的返回值和形式參數(shù)
中斷入口函數(shù)和中斷處理函數(shù)有什么區(qū)別?
中斷輸入函數(shù)是進(jìn)入中斷地址的輸入向量,中斷處理函數(shù)是響應(yīng)中斷,執(zhí)行中斷程序,輸出結(jié)果,達(dá)到處理突發(fā)事件的目的。
中斷函數(shù)注意點(diǎn)?
1. 中斷處理函數(shù)的返回值和形式參數(shù)
中斷處理函數(shù)不能有返回值和形式參數(shù),因?yàn)橹袛嗵幚砗瘮?shù)是由硬件(或觸發(fā)器)調(diào)用的,沒(méi)有程序向其傳遞參數(shù),也沒(méi)有程序接收其返回值,其參數(shù)通過(guò)全局變量傳遞。
但是,請(qǐng)注意,如果要檢測(cè)的其他函數(shù)的全局變量值在中斷服務(wù)函數(shù)中發(fā)生更改,則volatile關(guān)鍵字將用于定義全局變量。因?yàn)橹鞒绦蚩赡軙?huì)將變量讀入寄存器,然后每次只使用寄存器中的變量副本。如果此時(shí)不使用volatile關(guān)鍵字,則在中斷服務(wù)函數(shù)中修改變量的操作將被短路。
2. 浮點(diǎn)運(yùn)算是在中斷處理函數(shù)中執(zhí)行的
由于浮點(diǎn)運(yùn)算通常是由特殊的硬件執(zhí)行的,因此硬件設(shè)備會(huì)涉及類(lèi)似全局變量的內(nèi)容(如硬件端口或存儲(chǔ)在硬件設(shè)備中的數(shù)據(jù))。如果浮點(diǎn)運(yùn)算過(guò)程中斷,其他函數(shù)也可能使用浮點(diǎn)運(yùn)算,這將破壞設(shè)備中當(dāng)前的硬件數(shù)據(jù)??梢岳斫?,浮點(diǎn)運(yùn)算通常是不可重入的,因此浮點(diǎn)運(yùn)算不能用于中斷服務(wù)函數(shù)。
在滿(mǎn)足精度要求的前提下,浮點(diǎn)運(yùn)算可以多次擴(kuò)展為整數(shù)運(yùn)算。
3. 在中斷處理函數(shù)中使用printf函數(shù)
這個(gè)原理類(lèi)似于在上面的中斷服務(wù)函數(shù)中使用浮點(diǎn)數(shù),因?yàn)閜rintf函數(shù)使用硬件資源,并且這些資源應(yīng)該是互斥的(在多線程和多處理中),這使得printf函數(shù)不可重入且不能被重入用于中斷。
此外,malloc和free等函數(shù)使用全局內(nèi)存分配表,因此它們也是不可重入的,不能在中斷中使用。
請(qǐng)注意,許多標(biāo)準(zhǔn)庫(kù)函數(shù)是不可重入的,在中斷服務(wù)函數(shù)中應(yīng)謹(jǐn)慎使用。
中斷服務(wù)功能應(yīng)簡(jiǎn)短有效。
STM32中斷函數(shù)?
EXTI0_uqchannel]表示與外部中斷線EXTI0對(duì)應(yīng)的中斷功能。
以stm32f103vb系列為例,100pin,
通常我們使用的外部中斷線對(duì)應(yīng)的IO如下:
PA0、pb0、PC0、pd0、Pe0對(duì)應(yīng)exti0中斷;
依此類(lèi)推
pa15、pb15、PC15、pd15、pe15對(duì)應(yīng)exti5中斷。
exti0的相應(yīng)中斷函數(shù)為exti0irqchannel]exti1的相應(yīng)中斷函數(shù)為exti1irqchannel]exti2的相應(yīng)中斷函數(shù)為exti2irqchannel]exti3的相應(yīng)中斷函數(shù)為exti3irqchannel]exti4的相應(yīng)中斷函數(shù)為exti4exti5-> exti9對(duì)應(yīng)的中斷函數(shù)是exti9u5Irqhandler
exti10-> exti15對(duì)應(yīng)的中斷函數(shù)是exti15u10Irqhandler
如果使用哪種類(lèi)型的中斷,初始化哪種類(lèi)型的中斷,然后在中斷函數(shù)中寫(xiě)入要實(shí)現(xiàn)的內(nèi)容。
注意中斷功能不太容易。
網(wǎng)上有很多基本的例子,比如按鍵程序,鬧鐘中斷,你可以去看看。