中斷函數(shù)可以傳參嗎 中斷函數(shù)注意點(diǎn)?
中斷函數(shù)注意點(diǎn)?1. 中斷處理函數(shù)的返回值和形式參數(shù)中斷處理函數(shù)不能有返回值和形式參數(shù),因?yàn)橹袛嗵幚砗瘮?shù)是由硬件(或觸發(fā)器)調(diào)用的,沒有程序向其傳遞參數(shù),也沒有程序接收其返回值,其參數(shù)通過全局變量傳遞
中斷函數(shù)注意點(diǎn)?
1. 中斷處理函數(shù)的返回值和形式參數(shù)
中斷處理函數(shù)不能有返回值和形式參數(shù),因?yàn)橹袛嗵幚砗瘮?shù)是由硬件(或觸發(fā)器)調(diào)用的,沒有程序向其傳遞參數(shù),也沒有程序接收其返回值,其參數(shù)通過全局變量傳遞。
但是,請注意,如果要檢測的其他函數(shù)的全局變量值在中斷服務(wù)函數(shù)中發(fā)生更改,則volatile關(guān)鍵字將用于定義全局變量。因?yàn)橹鞒绦蚩赡軙⒆兞孔x入寄存器,然后每次只使用寄存器中的變量副本。如果此時(shí)不使用volatile關(guān)鍵字,則在中斷服務(wù)函數(shù)中修改變量的操作將被短路。
2. 浮點(diǎn)運(yùn)算是在中斷處理函數(shù)中執(zhí)行的
由于浮點(diǎn)運(yùn)算通常是由特殊的硬件執(zhí)行的,因此硬件設(shè)備會涉及類似全局變量的內(nèi)容(如硬件端口或存儲在硬件設(shè)備中的數(shù)據(jù))。如果浮點(diǎn)運(yùn)算過程中斷,其他函數(shù)也可能使用浮點(diǎn)運(yùn)算,這將破壞設(shè)備中當(dāng)前的硬件數(shù)據(jù)。可以理解,浮點(diǎn)運(yùn)算通常是不可重入的,因此浮點(diǎn)運(yùn)算不能用于中斷服務(wù)函數(shù)。
在滿足精度要求的前提下,浮點(diǎn)運(yùn)算可以多次擴(kuò)展為整數(shù)運(yùn)算。
3. 在中斷處理函數(shù)中使用printf函數(shù)
這個(gè)原理類似于在上面的中斷服務(wù)函數(shù)中使用浮點(diǎn)數(shù),因?yàn)閜rintf函數(shù)使用硬件資源,并且這些資源應(yīng)該是互斥的(在多線程和多處理中),這使得printf函數(shù)不可重入且不能被重入用于中斷。
此外,malloc和free等函數(shù)使用全局內(nèi)存分配表,因此它們也是不可重入的,不能在中斷中使用。
請注意,許多標(biāo)準(zhǔn)庫函數(shù)是不可重入的,在中斷服務(wù)函數(shù)中應(yīng)謹(jǐn)慎使用。
中斷服務(wù)功能應(yīng)簡短有效。