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