天天看點

Z-Stack分析--osal_int_disable( INTS_ALL )函數

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,關閉所有中斷。

Z-Stack分析--osal_int_disable( INTS_ALL )函數
Z-Stack分析--osal_int_disable( INTS_ALL )函數

如果interrupt_id == INTS_ALL條件不成立,那麼傳回INVALID_INTERRUPT_ID = 0x07,代表中斷的ID不正确,是非法的。

注:st函數的宏定義如下:#definest(x)      do { x } while (__LINE__ ==-1),__LINE__表示目前代碼的行号,他肯定不為-1,是以while循環的條件不成立,是以先執行後判斷,執行完成一次退出。

繼續閱讀