示例#1
0
文件: LLMJVM_RTX.c 项目: jfazli/PE208
int32_t LLMJVM_IMPL_scheduleRequest(int64_t absoluteTime){
	int64_t relativeTime;
	int64_t relativeTick;//number of ticks before absoluteTime

	//First check if absolute time is lower than current schedule time
	if(absoluteTime < LLMJVM_RTX_nextWakeupTime){
		if(LLMJVM_RTX_currentTimerID != NULL)
			os_tmr_kill(LLMJVM_RTX_currentTimerID);//kill potential previously scheduled timer
		LLMJVM_RTX_nextWakeupTime = absoluteTime;

		relativeTime = absoluteTime - LLMJVM_IMPL_getCurrentTime(MICROEJ_TRUE);
		relativeTick = LLMJVM_RTX_timeToTick(relativeTime);  //number of ticks before absoluteTime

		//Checks if absoluteTick has already been reached
		if(relativeTick > 0){
			if(relativeTick > UINT16_MAX)
				relativeTick = UINT16_MAX;//saturate relativeTick value to 16 bits
 
			LLMJVM_RTX_currentTimerID = os_tmr_create((U16)relativeTick, LLMJVM_RTX_TIMER_INFO);

			if(LLMJVM_RTX_currentTimerID == NULL)
				return LLMJVM_ERROR;
			else
				return LLMJVM_OK;
		}
		else {
			//absoluteTick has been reached, notify the vm now
			return LLMJVM_schedule();
		}
	}

	return LLMJVM_OK;
}
/****************************************************************************************************
 * @fn      ASFKillTimer
 *          Kills the timer that was created earlier
 *
 * @param   pTimer  Pointer to timer control block containing the attributes of the timer to be
 *                  created.
 *
 * @return  none
 *
 * @see     ASFTimerStart()
 ***************************************************************************************************/
void _ASFKillTimer ( AsfTimer *pTimer, char *_file, int _line )
{
    TimerId ret;
    ASF_assert( pTimer != NULLP );
    ret = os_tmr_kill( pTimer->timerId );
    ASF_assert( ret == NULL );
    pTimer->sysUse = (uint32_t)-1; //Timer no longer in use
}