osal_int_disable( INTS_ALL )分析:
源碼:
uint8 osal_int_disable( uint8 interrupt_id )
{
if ( interrupt_id == INTS_ALL )
{
HAL_DISABLE_INTERRUPTS();
return ( SUCCESS );
}
else
{
return ( INVALID_INTERRUPT_ID );
}
}
這個函數的作用是關閉所有的中斷,如果interrupt_id == INTS_ALL條件成立,則執行關閉中斷函數,并且在其内部調用函數HAL_DISABLE_INTERRUPTS(),而此函數是通過宏定義實作的:#defineHAL_DISABLE_INTERRUPTS() st( EA =0; )
可以發現EA=0,檢視技術手冊我們可以知道EA是總中斷的控制位,也就是總中斷為0,關閉所有中斷。
如果interrupt_id == INTS_ALL條件不成立,那麼傳回INVALID_INTERRUPT_ID = 0x07,代表中斷的ID不正确,是非法的。
注:st函數的宏定義如下:#definest(x) do { x } while (__LINE__ ==-1),__LINE__表示目前代碼的行号,他肯定不為-1,是以while循環的條件不成立,是以先執行後判斷,執行完成一次退出。