osal_start_timerEx 函数分析

经常用到osal_start_timerEx函数来周期性产生某一事件,本文就来分析一下该函数:

/*********************************************************************
 * @fn      osal_start_timerEx
 *
 * @brief
 *
 *   This function is called to start a timer to expire in n mSecs.
 *   When the timer expires, the calling task will get the specified event.
 *
 * @param   uint8 taskID - task id to set timer for
 * @param   uint16 event_id - event to be notified with
 * @param   UNINT16 timeout_value - in milliseconds.
 *
 * @return  SUCCESS, or NO_TIMER_AVAIL.
 */
uint8 osal_start_timerEx( uint8 taskID, uint16 event_id, uint16 timeout_value )
{
  halIntState_t intState;
  osalTimerRec_t *newTimer;

  1.HAL_ENTER_CRITICAL_SECTION( intState );  // Hold off interrupts.

  // Add timer
  2.newTimer = osalAddTimer( taskID, event_id, timeout_value );

  3.HAL_EXIT_CRITICAL_SECTION( intState );   // Re-enable interrupts.

  return ( (newTimer != NULL) ? SUCCESS : NO_TIMER_AVAIL );
}

上面就是该函数代码,第一句是保存当前中断情况,然后关闭中断,第3句是还原中断,所以关键的就是地2句调用osalAddTimer函数生成一个

osalTimerRec_t类型的量,

待续。。。。

你可能感兴趣的:(蓝牙模块学习)