经常用到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类型的量,
待续。。。。