Exemple #1
0
/*test case:test the reaction of the system called with 
an activation of a task*/
static void test_t1_instance(void)
{
	
	StatusType result_inst_2, result_inst_4, result_inst_5, result_inst_6, result_inst_7, result_inst_10, result_inst_11, result_inst_12, result_inst_14;
	TickType result_inst_3, result_inst_13;
	AlarmBaseType result_inst_1;
	
	SCHEDULING_CHECK_INIT(1);
	result_inst_2 = GetAlarmBase(Alarm1, &result_inst_1);
	SCHEDULING_CHECK_AND_EQUAL_INT_FIRST(1,OSMAXALLOWEDVALUE_Counter1, (int)(result_inst_1.maxallowedvalue));
	SCHEDULING_CHECK_AND_EQUAL_INT_FIRST(1,OSTICKSPERBASE_Counter1, (int)(result_inst_1.ticksperbase));
	SCHEDULING_CHECK_AND_EQUAL_INT_FIRST(1,OSMINCYCLE_Counter1, (int)(result_inst_1.mincycle));
	SCHEDULING_CHECK_AND_EQUAL_INT(1,E_OK, result_inst_2);
	
	SCHEDULING_CHECK_INIT(2);
	result_inst_4 = GetAlarm(Alarm1, &result_inst_3);
	SCHEDULING_CHECK_AND_EQUAL_INT(2,E_OS_NOFUNC, result_inst_4);
	
	SCHEDULING_CHECK_INIT(3);
	result_inst_5 = CancelAlarm(Alarm1);
	SCHEDULING_CHECK_AND_EQUAL_INT(3,E_OS_NOFUNC, result_inst_5);
	
	SCHEDULING_CHECK_INIT(4);
	result_inst_6 = SetAbsAlarm(Alarm1, 2, 2);
	SCHEDULING_CHECK_AND_EQUAL_INT(4,E_OK, result_inst_6);
	
	SCHEDULING_CHECK_INIT(5);
	result_inst_7 = SetAbsAlarm(Alarm1, 3, 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(5,E_OS_STATE, result_inst_7);
	
	WaitActivationPeriodicAlarm(Alarm1);
	
	WaitActivationPeriodicAlarm(Alarm1);
	
	SCHEDULING_CHECK_INIT(8);
	result_inst_10 = CancelAlarm(Alarm1);
	SCHEDULING_CHECK_AND_EQUAL_INT(8,E_OK, result_inst_10);
	
	SCHEDULING_CHECK_INIT(9);
	result_inst_11 = SetRelAlarm(Alarm1, 2, 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(9,E_OK, result_inst_11);
	
	SCHEDULING_CHECK_INIT(10);
	result_inst_12 = SetRelAlarm(Alarm1, 3, 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(10,E_OS_STATE, result_inst_12);
	
	SCHEDULING_CHECK_INIT(11);
	result_inst_14 = GetAlarm(Alarm1, &result_inst_13);
	SCHEDULING_CHECK_AND_EQUAL_INT_FIRST(11,2, result_inst_13);
	SCHEDULING_CHECK_AND_EQUAL_INT(11,E_OK, result_inst_14);
	
	WaitActivationOneShotAlarm(Alarm1);
	
	SCHEDULING_CHECK_STEP(13);
	
}
Exemple #2
0
/*test case:test the reaction of the system called with 
an activation of a task*/
static void test_t1_instance(void)
{
	
	StatusType result_inst_1, result_inst_2, result_inst_3, result_inst_4, result_inst_5, result_inst_6, result_inst_7, result_inst_9, result_inst_10;
	TickType result_inst_8;

	SCHEDULING_CHECK_INIT(2);
	result_inst_1 = SetAbsAlarm(Alarm1, 2, 2);
	SCHEDULING_CHECK_AND_EQUAL_INT(2,E_OK, result_inst_1);
	
	SCHEDULING_CHECK_INIT(3);
	result_inst_2 = SetAbsAlarm(Alarm1, 3, 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(3,E_OS_STATE, result_inst_2);
	
	WaitActivationPeriodicAlarm(Alarm1);
	
	SCHEDULING_CHECK_INIT(4);
	result_inst_3 = Schedule();
	SCHEDULING_CHECK_AND_EQUAL_INT(6,E_OK, result_inst_3);	

	WaitActivationPeriodicAlarm(Alarm1);
	
	SCHEDULING_CHECK_INIT(7);
	result_inst_4 = Schedule();
	SCHEDULING_CHECK_AND_EQUAL_INT(9,E_OK, result_inst_4);	
	
	SCHEDULING_CHECK_INIT(10);
	result_inst_5 = CancelAlarm(Alarm1);
	SCHEDULING_CHECK_AND_EQUAL_INT(10,E_OK, result_inst_5);
	
	SCHEDULING_CHECK_INIT(11);
	result_inst_6 = SetRelAlarm(Alarm1, 2, 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(11,E_OK, result_inst_6);
	
	SCHEDULING_CHECK_INIT(12);
	result_inst_7 = SetRelAlarm(Alarm1, 3, 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(12,E_OS_STATE, result_inst_7);
	
	SCHEDULING_CHECK_INIT(13);
	result_inst_9 = GetAlarm(Alarm1, &result_inst_8);
	SCHEDULING_CHECK_AND_EQUAL_INT_FIRST(13,2, result_inst_8);
	SCHEDULING_CHECK_AND_EQUAL_INT(13,E_OK, result_inst_9);
	
	WaitActivationOneShotAlarm(Alarm1);

	SCHEDULING_CHECK_INIT(14);
	result_inst_10 = Schedule();
	SCHEDULING_CHECK_AND_EQUAL_INT(15,E_OK, result_inst_10);
	
}
Exemple #3
0
u32_t
sys_arch_sem_wait(sys_sem_t Sema,u32_t u32Timeout)
{

	//Wait u32Timeout msec for the Sema to receive a signal.

	dbgprintf("sys_arch_sem_wait: Sema: %d, Timeout: %x (TID: %d)\n",Sema,u32Timeout,GetThreadId());

	if(u32Timeout==0)
	{

		//Wait with no timeouts.

		return	WaitSema(Sema)==0 ? 0:SYS_ARCH_TIMEOUT;
	}
	else if(u32Timeout==1)
	{

		//Poll.

		return	PollSema(Sema)==0 ? 0:SYS_ARCH_TIMEOUT;
	}
	else
	{

		//Use alarm to timeout.

		iop_sys_clock_t	ClockTicks;
		iop_sys_clock_t	Start;
		iop_sys_clock_t	End;
		int					iPID=GetThreadId();
		u32_t					u32WaitTime;

		GetSystemTime(&Start);
		USec2SysClock(u32Timeout*1000,&ClockTicks);
		SetAlarm(&ClockTicks,TimeoutHandler,(void*)iPID);

		if(WaitSema(Sema)!=0)
		{
			return	SYS_ARCH_TIMEOUT;
		}
		CancelAlarm(TimeoutHandler,(void*)iPID);
		GetSystemTime(&End);

		u32WaitTime=ComputeTimeDiff(&Start,&End);
		return	u32WaitTime<=u32Timeout ? u32WaitTime:u32Timeout;
	}
}
/*test case:test the reaction of the system called with 
an activation of a task*/
static void test_t1_instance(void)
{
	StatusType result_inst_1;

	SCHEDULING_CHECK_STEP(1);
	
	WaitActivationOneShotAlarm(Alarm1);

	SCHEDULING_CHECK_STEP(3);

	WaitActivationPeriodicAlarm(Alarm2);
	
	SCHEDULING_CHECK_INIT(5);
	result_inst_1 = CancelAlarm(Alarm2);
	SCHEDULING_CHECK_AND_EQUAL_INT(5,E_OK, result_inst_1);
	
	SCHEDULING_CHECK_STEP(6);
	
	
}
Exemple #5
0
static u32_t sys_arch_mbox_fetch_internal(sys_mbox_t pMBox, void** ppvMSG, u32_t TimeElaspedout, char block)
{
	void *pmsg;
	u32_t TimeElasped = 0;
	iop_sys_clock_t	ClockTicks;
	iop_sys_clock_t	Start;
	iop_sys_clock_t	End;
	int result, iPID;

	if(block){
		iPID=GetThreadId();

		if(TimeElaspedout > 0)
		{
			GetSystemTime(&Start);
			USec2SysClock(TimeElaspedout * 1000, &ClockTicks);
			SetAlarm(&ClockTicks, &TimeoutHandler, (void*)iPID);
		}

		if((result=ReceiveMbx(&pmsg, pMBox))!= 0) { return(SYS_ARCH_TIMEOUT); }

		if(TimeElaspedout > 0)
		{
			CancelAlarm(TimeoutHandler,(void*)iPID);
			GetSystemTime(&End);

			TimeElasped = ComputeTimeDiff(&Start, &End);
		}
	}
	else{
		TimeElasped=((result=PollMbx(&pmsg, pMBox))!=0)?SYS_MBOX_EMPTY:0;
	}

	if(result==0){
		*ppvMSG = ((arch_message *)pmsg)->sys_msg;
		free_msg((arch_message *) pmsg);
	}

	//Return the number of msec waited.
	return	TimeElasped;
}
/*test case:test the reaction of the system called with 
 an activation of a task*/
static void test_t1_instance(void)
{
	StatusType result_inst_1, result_inst_2, result_inst_3, result_inst_4, result_inst_5, result_inst_7;
	TickType result_inst_6;

	SCHEDULING_CHECK_INIT(1);
	result_inst_1 = SetAbsAlarm(Alarm1, 2, 2);
	SCHEDULING_CHECK_AND_EQUAL_INT(1,E_OK, result_inst_1);
	
	SCHEDULING_CHECK_INIT(2);
	result_inst_2 = SetAbsAlarm(Alarm1, 3, 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(2,E_OS_STATE, result_inst_2);
	
	WaitActivationPeriodicAlarm(Alarm1);
	
	SCHEDULING_CHECK_STEP(4);

	WaitActivationPeriodicAlarm(Alarm1);
	
	SCHEDULING_CHECK_INIT(6);
	result_inst_3 = CancelAlarm(Alarm1);
	SCHEDULING_CHECK_AND_EQUAL_INT(6,E_OK, result_inst_3);
	
	SCHEDULING_CHECK_INIT(7);
	result_inst_4 = SetRelAlarm(Alarm1, 2, 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(7,E_OK, result_inst_4);
	
	SCHEDULING_CHECK_INIT(8);
	result_inst_5 = SetRelAlarm(Alarm1, 3, 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(8,E_OS_STATE, result_inst_5);
	
	SCHEDULING_CHECK_INIT(9);
	result_inst_7 = GetAlarm(Alarm1, &result_inst_6);
	SCHEDULING_CHECK_AND_EQUAL_INT_FIRST(9,2, result_inst_6);
	SCHEDULING_CHECK_AND_EQUAL_INT(9,E_OK, result_inst_7);
	
	WaitActivationOneShotAlarm(Alarm1);
	
	SCHEDULING_CHECK_STEP(11);
	
}
Exemple #7
0
u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout)
{
	//Wait TimeElaspedout msec for the Sema to receive a signal.
	dbgprintf("sys_arch_sem_wait: Sema: %d, Timeout: %x (TID: %d)\n", *sem, timeout, GetThreadId());
	u32_t result;

	if(timeout==0)
	{
		//Wait with no timeouts.
		result=(WaitSema(*sem)==0)?0:SYS_ARCH_TIMEOUT;
	}
	else if(timeout==1)
	{
		//Poll.
		result=(PollSema(*sem)==0)?0:SYS_ARCH_TIMEOUT;
	}
	else
	{
		//Use alarm to timeout.
		iop_sys_clock_t	ClockTicks;
		iop_sys_clock_t	Start;
		iop_sys_clock_t	End;
		int	iPID=GetThreadId();
		u32_t	u32WaitTime;

		GetSystemTime(&Start);
		USec2SysClock(timeout*1000,&ClockTicks);
		SetAlarm(&ClockTicks, &TimeoutHandler, (void*)iPID);

		if(WaitSema(*sem)==0){
			CancelAlarm(TimeoutHandler,(void*)iPID);
			GetSystemTime(&End);

			u32WaitTime=ComputeTimeDiff(&Start, &End);
			result=(u32WaitTime<=timeout)?u32WaitTime:timeout;
		}else result=SYS_ARCH_TIMEOUT;
	}

	return result;
}
Exemple #8
0
u32_t
sys_arch_mbox_fetch(sys_mbox_t pMBox,void** ppvMSG,u32_t u32Timeout)
{
    void *pmsg;
    u32 u32Time = 0;
	iop_sys_clock_t	ClockTicks;
	iop_sys_clock_t	Start;
	iop_sys_clock_t	End;

    if(PollMbx(&pmsg, pMBox) != 0)
    {
    	int iPID=GetThreadId();

        if(u32Timeout > 0)
        {
    		GetSystemTime(&Start);
    		USec2SysClock(u32Timeout * 1000, &ClockTicks);
    		SetAlarm(&ClockTicks, TimeoutHandler, (void*)iPID);
    	}

        if(ReceiveMbx(&pmsg, pMBox) != 0) { return(SYS_ARCH_TIMEOUT); }

        if(u32Timeout > 0)
        {
    		CancelAlarm(TimeoutHandler,(void*)iPID);
    		GetSystemTime(&End);

    		u32Time = ComputeTimeDiff(&Start,&End);
    	}
    }

    if(ppvMSG) { *ppvMSG = ((arch_message *) pmsg)->sys_msg; }

    free_msg((arch_message *) pmsg);

	//Return the number of msec waited.
	return	u32Time;
}
Exemple #9
0
/*test case:test the reaction of the system called with 
 an activation of a task*/
static void test_t1_instance(void)
{
	
	StatusType result_inst_2, result_inst_4, result_inst_6, result_inst_7, result_inst_8, result_inst_9, result_inst_10, result_inst_11, result_inst_12, result_inst_13, result_inst_14, result_inst_15, result_inst_16, result_inst_17;
	AlarmBaseType result_inst_1, result_inst_5;
	TickType result_inst_3;
	
	SCHEDULING_CHECK_INIT(1);
	result_inst_2 = GetAlarmBase(INVALID_ALARM, &result_inst_1);
	SCHEDULING_CHECK_AND_EQUAL_INT(1,E_OS_ID, result_inst_2);
	
	SCHEDULING_CHECK_INIT(2);
	result_inst_4 = GetAlarm(INVALID_ALARM, &result_inst_3);
	SCHEDULING_CHECK_AND_EQUAL_INT(2,E_OS_ID, result_inst_4);
	
	SCHEDULING_CHECK_INIT(3);
	result_inst_6 = GetAlarmBase(Alarm1, &result_inst_5);
	SCHEDULING_CHECK_AND_EQUAL_INT_FIRST(3,OSMAXALLOWEDVALUE, (int)(result_inst_5.maxallowedvalue));
	SCHEDULING_CHECK_AND_EQUAL_INT_FIRST(3,OSTICKSPERBASE, (int)(result_inst_5.ticksperbase));
	SCHEDULING_CHECK_AND_EQUAL_INT_FIRST(3,OSMINCYCLE, (int)(result_inst_5.mincycle));	
	SCHEDULING_CHECK_AND_EQUAL_INT(3,E_OK, result_inst_6);
	
	SCHEDULING_CHECK_INIT(4);
	result_inst_7 = SetRelAlarm(INVALID_ALARM, 0, 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(4,E_OS_ID, result_inst_7);
	
	SCHEDULING_CHECK_INIT(5);
	result_inst_8 = SetRelAlarm(Alarm1, -1, 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(5,E_OS_VALUE, result_inst_8);
	
	SCHEDULING_CHECK_INIT(6);
	result_inst_9 = SetRelAlarm(Alarm1, result_inst_5.maxallowedvalue + 1, 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(6,E_OS_VALUE, result_inst_9);
	
	SCHEDULING_CHECK_INIT(7);
	result_inst_10 = SetRelAlarm(Alarm1, 0, result_inst_5.mincycle - 1);
	SCHEDULING_CHECK_AND_EQUAL_INT(7,E_OS_VALUE, result_inst_10);
	
	SCHEDULING_CHECK_INIT(8);
	result_inst_11 = SetRelAlarm(Alarm1, 0,  result_inst_5.maxallowedvalue + 1);
	SCHEDULING_CHECK_AND_EQUAL_INT(8,E_OS_VALUE, result_inst_11);
	
	SCHEDULING_CHECK_INIT(9);
	result_inst_12 = SetAbsAlarm(INVALID_ALARM, 0, 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(9,E_OS_ID, result_inst_12);
	
	SCHEDULING_CHECK_INIT(10);
	result_inst_13 = SetAbsAlarm(Alarm1, -1, 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(10,E_OS_VALUE, result_inst_13);
	
	SCHEDULING_CHECK_INIT(11);
	result_inst_14 = SetAbsAlarm(Alarm1, result_inst_5.maxallowedvalue + 1, 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(11,E_OS_VALUE, result_inst_14);
	
	SCHEDULING_CHECK_INIT(12);
	result_inst_15 = SetAbsAlarm(Alarm1, 0, result_inst_5.mincycle - 1);
	SCHEDULING_CHECK_AND_EQUAL_INT(12,E_OS_VALUE, result_inst_15);
	
	SCHEDULING_CHECK_INIT(13);
	result_inst_16 = SetAbsAlarm(Alarm1, 0,  result_inst_5.maxallowedvalue + 1);
	SCHEDULING_CHECK_AND_EQUAL_INT(13,E_OS_VALUE, result_inst_16);
	
	SCHEDULING_CHECK_INIT(14);
	result_inst_17 = CancelAlarm(INVALID_ALARM);
	SCHEDULING_CHECK_AND_EQUAL_INT(14,E_OS_ID, result_inst_17);
	
}
Exemple #10
0
/*test case:test the reaction of the system called with 
an activation of a task*/
static void test_t1_instance(void)
{
	AlarmBaseType AlarmBaseType_inst_1;
	EventMaskType EventMaskType_inst_1;
	StatusType result_inst_2, result_inst_3, result_inst_4, result_inst_5, result_inst_6, result_inst_7, result_inst_8, result_inst_9, result_inst_10, result_inst_11, result_inst_12, result_inst_13, result_inst_14, result_inst_15, result_inst_16, result_inst_17, result_inst_18, result_inst_19;
	TaskStateType TaskStateType_inst_1;
	TaskType TaskType_inst_1;
	TickType TickType_inst_1;
		
	SCHEDULING_CHECK_STEP(1);
	
	SCHEDULING_CHECK_STEP(2);
	SuspendAllInterrupts();
	
	SCHEDULING_CHECK_INIT(3);
	result_inst_2 = ActivateTask(t2);
	SCHEDULING_CHECK_AND_EQUAL_INT(4,E_OS_DISABLEDINT, result_inst_2);
	
	SCHEDULING_CHECK_INIT(5);
	result_inst_3 = TerminateTask();
	SCHEDULING_CHECK_AND_EQUAL_INT(6,E_OS_DISABLEDINT, result_inst_3);
	
	SCHEDULING_CHECK_INIT(7);
	result_inst_4 = ChainTask(t2);
	SCHEDULING_CHECK_AND_EQUAL_INT(8,E_OS_DISABLEDINT, result_inst_4);
	
	SCHEDULING_CHECK_INIT(9);
	result_inst_5 = Schedule();
	SCHEDULING_CHECK_AND_EQUAL_INT(10,E_OS_DISABLEDINT, result_inst_5);
	
	SCHEDULING_CHECK_INIT(11);
	result_inst_6 = GetTaskID(&TaskType_inst_1);
	SCHEDULING_CHECK_AND_EQUAL_INT(12,E_OS_DISABLEDINT, result_inst_6);
	
	SCHEDULING_CHECK_INIT(13);
	result_inst_7 = GetTaskState(t2, &TaskStateType_inst_1);
	SCHEDULING_CHECK_AND_EQUAL_INT(14,E_OS_DISABLEDINT, result_inst_7);
	
	SCHEDULING_CHECK_INIT(15);
	result_inst_8 = GetResource(Resource1);
	SCHEDULING_CHECK_AND_EQUAL_INT(16,E_OS_DISABLEDINT, result_inst_8);
	
	SCHEDULING_CHECK_INIT(17);
	result_inst_9 = ReleaseResource(Resource1);
	SCHEDULING_CHECK_AND_EQUAL_INT(18,E_OS_DISABLEDINT, result_inst_9);
	
	SCHEDULING_CHECK_INIT(19);
	result_inst_10 = SetEvent(t2, Event1);
	SCHEDULING_CHECK_AND_EQUAL_INT(20,E_OS_DISABLEDINT, result_inst_10);
	
	SCHEDULING_CHECK_INIT(21);
	result_inst_11 = ClearEvent(Event1);
	SCHEDULING_CHECK_AND_EQUAL_INT(22,E_OS_DISABLEDINT, result_inst_11);
	
	SCHEDULING_CHECK_INIT(23);
	result_inst_12 = GetEvent(t2, &EventMaskType_inst_1);
	SCHEDULING_CHECK_AND_EQUAL_INT(24,E_OS_DISABLEDINT, result_inst_12);
	
	SCHEDULING_CHECK_INIT(25);
	result_inst_13 = WaitEvent(Event1);
	SCHEDULING_CHECK_AND_EQUAL_INT(26,E_OS_DISABLEDINT, result_inst_13);
	
	SCHEDULING_CHECK_INIT(27);
	result_inst_14 = GetAlarmBase(Alarm1, &AlarmBaseType_inst_1);
	SCHEDULING_CHECK_AND_EQUAL_INT(28,E_OS_DISABLEDINT, result_inst_14);
	
	SCHEDULING_CHECK_INIT(29);
	result_inst_15 = GetAlarm(Alarm1, &TickType_inst_1);
	SCHEDULING_CHECK_AND_EQUAL_INT(30,E_OS_DISABLEDINT, result_inst_15);
	
	SCHEDULING_CHECK_INIT(31);
	result_inst_16 = SetRelAlarm(Alarm1, 1, 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(32,E_OS_DISABLEDINT, result_inst_16);
	
	SCHEDULING_CHECK_INIT(33);
	result_inst_17 = SetAbsAlarm(Alarm1, 1, 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(34,E_OS_DISABLEDINT, result_inst_17);
	
	SCHEDULING_CHECK_INIT(35);
	result_inst_18 = CancelAlarm(Alarm1);
	SCHEDULING_CHECK_AND_EQUAL_INT(36,E_OS_DISABLEDINT, result_inst_18);
	
	SCHEDULING_CHECK_INIT(37);
	result_inst_19 = GetActiveApplicationMode();
	SCHEDULING_CHECK_AND_EQUAL_INT(38,OSDEFAULTAPPMODE, result_inst_19);
	
	SCHEDULING_CHECK_STEP(39);
	ResumeAllInterrupts();
}
Exemple #11
0
/*test case:test the reaction of the system called with 
 an activation of a task*/
static void test_isr1_instance(void)
{
	StatusType result_inst_1, result_inst_1_5, result_inst_2, result_inst_3, result_inst_4, result_inst_5, result_inst_6, result_inst_7, result_inst_8, result_inst_9, result_inst_10, result_inst_11, result_inst_12, result_inst_13, result_inst_14, result_inst_15;
	StatusType result_inst_16, result_inst_17, result_inst_18, result_inst_19, result_inst_20, result_inst_21, result_inst_22, result_inst_23, result_inst_24, result_inst_25, result_inst_26, result_inst_27, result_inst_28, result_inst_29, result_inst_30, result_inst_31, result_inst_32, result_inst_33, result_inst_34, result_inst_35;
	AlarmBaseType alarmbase;
	TickType tik;
	
	SCHEDULING_CHECK_INIT(2);
	result_inst_1 = ActivateTask(t4);
	SCHEDULING_CHECK_AND_EQUAL_INT(2,E_OK, result_inst_1);
	
	SCHEDULING_CHECK_INIT(3);
	result_inst_1_5 = ActivateTask(t3);
	SCHEDULING_CHECK_AND_EQUAL_INT(3,E_OK, result_inst_1_5);
	
	SCHEDULING_CHECK_INIT(4);
	result_inst_2 = GetAlarmBase(INVALID_ALARM, &alarmbase);
	SCHEDULING_CHECK_AND_EQUAL_INT(4,E_OS_ID, result_inst_2);
	
	SCHEDULING_CHECK_INIT(5);
	result_inst_3 = GetAlarmBase(Alarm0, &alarmbase);
	SCHEDULING_CHECK_AND_EQUAL_INT(5,E_OK, result_inst_3);
	
	SCHEDULING_CHECK_INIT(6);
	result_inst_4 = GetAlarm(INVALID_ALARM, &tik);
	SCHEDULING_CHECK_AND_EQUAL_INT(6,E_OS_ID, result_inst_4);
	
	SCHEDULING_CHECK_INIT(7);
	result_inst_5 = GetAlarm(Alarm0, &tik);
	SCHEDULING_CHECK_AND_EQUAL_INT(7,E_OS_NOFUNC, result_inst_5);
	
	
	SCHEDULING_CHECK_INIT(8);
	result_inst_6 = SetRelAlarm(INVALID_ALARM, 0, 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(8,E_OS_ID, result_inst_6);
	
	SCHEDULING_CHECK_INIT(9);
	result_inst_7 = SetRelAlarm(Alarm0, -1 , 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(9,E_OS_VALUE, result_inst_7);
	
	SCHEDULING_CHECK_INIT(10);
	result_inst_8 = SetRelAlarm(Alarm0, alarmbase.maxallowedvalue + 1 , 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(10,E_OS_VALUE, result_inst_8);	
	
	SCHEDULING_CHECK_INIT(11);
	result_inst_9 = SetRelAlarm(Alarm0, 0 , alarmbase.mincycle - 1);
	SCHEDULING_CHECK_AND_EQUAL_INT(11,E_OS_VALUE, result_inst_9);
	
	SCHEDULING_CHECK_INIT(12);
	result_inst_10 = SetRelAlarm(Alarm0, 0 , alarmbase.maxallowedvalue + 1);
	SCHEDULING_CHECK_AND_EQUAL_INT(12,E_OS_VALUE, result_inst_10);	
	
	
	SCHEDULING_CHECK_INIT(13);
	result_inst_11 = SetAbsAlarm(INVALID_ALARM, 0, 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(13,E_OS_ID, result_inst_11);
	
	SCHEDULING_CHECK_INIT(14);
	result_inst_12 = SetAbsAlarm(Alarm0, -1 , 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(14,E_OS_VALUE, result_inst_12);
	
	SCHEDULING_CHECK_INIT(15);
	result_inst_13 = SetAbsAlarm(Alarm0, alarmbase.maxallowedvalue + 1 , 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(15,E_OS_VALUE, result_inst_13);	
	
	SCHEDULING_CHECK_INIT(16);
	result_inst_14 = SetAbsAlarm(Alarm0, 0 , alarmbase.mincycle - 1);
	SCHEDULING_CHECK_AND_EQUAL_INT(16,E_OS_VALUE, result_inst_14);
	
	SCHEDULING_CHECK_INIT(17);
	result_inst_15 = SetAbsAlarm(Alarm0, 0 , alarmbase.maxallowedvalue + 1);
	SCHEDULING_CHECK_AND_EQUAL_INT(17,E_OS_VALUE, result_inst_15);	
	
	
	SCHEDULING_CHECK_INIT(18);
	result_inst_16 = CancelAlarm(INVALID_ALARM);
	SCHEDULING_CHECK_AND_EQUAL_INT(18,E_OS_ID, result_inst_16);	
	
	SCHEDULING_CHECK_INIT(19);
	result_inst_17 = CancelAlarm(Alarm0);
	SCHEDULING_CHECK_AND_EQUAL_INT(19,E_OS_NOFUNC, result_inst_17);	
	
	
	SCHEDULING_CHECK_INIT(20);
	result_inst_18 = SetRelAlarm(Alarm1_1, 2 , 2);
	SCHEDULING_CHECK_AND_EQUAL_INT(20,E_OK, result_inst_18);	
	
	SCHEDULING_CHECK_INIT(21);
	result_inst_19 = SetRelAlarm(Alarm1_1, 2 , 2);
	SCHEDULING_CHECK_AND_EQUAL_INT(21,E_OS_STATE, result_inst_19);	
	
	SCHEDULING_CHECK_INIT(22);
	result_inst_20 = GetAlarm(Alarm1_1, &tik);
	SCHEDULING_CHECK_AND_EQUAL_INT_FIRST(22,E_OK, result_inst_20);
	SCHEDULING_CHECK_AND_EQUAL_INT(22,2, tik);
	
	WaitActivationPeriodicAlarm(Alarm1_1);
	
	SCHEDULING_CHECK_INIT(23);
	result_inst_21 = CancelAlarm(Alarm1_1);
	SCHEDULING_CHECK_AND_EQUAL_INT(23,E_OK, result_inst_21);	
	
	
	SCHEDULING_CHECK_INIT(24);
	result_inst_22 = SetAbsAlarm(Alarm1_2, 2 , 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(24,E_OK, result_inst_22);	
	
	SCHEDULING_CHECK_INIT(25);
	result_inst_23 = SetAbsAlarm(Alarm1_2, 2 , 2);
	SCHEDULING_CHECK_AND_EQUAL_INT(25,E_OS_STATE, result_inst_23);	
	
	WaitActivationOneShotAlarm(Alarm1_2);
	
	
	SCHEDULING_CHECK_INIT(26);
	result_inst_24 = SetRelAlarm(Alarm2_1, 2 , 2);
	SCHEDULING_CHECK_AND_EQUAL_INT(26,E_OK, result_inst_24);	
	
	SCHEDULING_CHECK_INIT(27);
	result_inst_25 = SetRelAlarm(Alarm2_1, 2 , 2);
	SCHEDULING_CHECK_AND_EQUAL_INT(27,E_OS_STATE, result_inst_25);	
	
	SCHEDULING_CHECK_INIT(28);
	result_inst_26 = GetAlarm(Alarm2_1, &tik);
	SCHEDULING_CHECK_AND_EQUAL_INT_FIRST(28,E_OK, result_inst_26);
	SCHEDULING_CHECK_AND_EQUAL_INT(28,2, tik);
	
	WaitActivationPeriodicAlarm(Alarm2_1);
	
	SCHEDULING_CHECK_INIT(29);
	result_inst_27 = CancelAlarm(Alarm2_1);
	SCHEDULING_CHECK_AND_EQUAL_INT(29,E_OK, result_inst_27);	
	
	
	SCHEDULING_CHECK_INIT(30);
	result_inst_28 = SetAbsAlarm(Alarm2_2, 2 , 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(30,E_OK, result_inst_28);	
	
	SCHEDULING_CHECK_INIT(31);
	result_inst_29 = SetAbsAlarm(Alarm2_2, 2 , 2);
	SCHEDULING_CHECK_AND_EQUAL_INT(31,E_OS_STATE, result_inst_29);	
	
	WaitActivationOneShotAlarm(Alarm2_2);
	
	
	SCHEDULING_CHECK_INIT(32);
	result_inst_30 = SetRelAlarm(Alarm3, 2 , 2);
	SCHEDULING_CHECK_AND_EQUAL_INT(32,E_OK, result_inst_30);	
	
	SCHEDULING_CHECK_INIT(33);
	result_inst_31 = SetRelAlarm(Alarm3, 2 , 2);
	SCHEDULING_CHECK_AND_EQUAL_INT(33,E_OS_STATE, result_inst_31);	
	
	SCHEDULING_CHECK_INIT(34);
	result_inst_32 = GetAlarm(Alarm3, &tik);
	SCHEDULING_CHECK_AND_EQUAL_INT_FIRST(34,E_OK, result_inst_32);
	SCHEDULING_CHECK_AND_EQUAL_INT(34,2, tik);
	
	WaitActivationPeriodicAlarm(Alarm3);
	
	SCHEDULING_CHECK_INIT(36);
	result_inst_33 = CancelAlarm(Alarm3);
	SCHEDULING_CHECK_AND_EQUAL_INT(36,E_OK, result_inst_33);	
	
	
	SCHEDULING_CHECK_INIT(37);
	result_inst_34 = SetAbsAlarm(Alarm3, 2 , 0);
	SCHEDULING_CHECK_AND_EQUAL_INT(37,E_OK, result_inst_34);	
	
	SCHEDULING_CHECK_INIT(38);
	result_inst_35 = SetAbsAlarm(Alarm3, 2 , 2);
	SCHEDULING_CHECK_AND_EQUAL_INT(38,E_OS_STATE, result_inst_35);	
	
	WaitActivationOneShotAlarm(Alarm3);
	
	SCHEDULING_CHECK_STEP(40);
	
}
void tempo(int ms)
{
    CancelAlarm(0);
    SetRelAlarm (0, ms, T_ORDO) ;
}
Exemple #13
0
/** 走行中の処理 */
SINT Driver::state_driving(void){

    //DEBUG_PRINT1("s", "state_driving()");

    RobotInfo r_info;
    NavInfo  n_info;

    RobotCmd cmd;

    bool ret;

	navigator_.Init();

	//Position prePos;
	//Position now_position;
 //   F32 r = 41.34;    // タイヤの半径 []
 //   F32 d = 82.6;      // 左右のタイヤ間距離 [mm]
 //   S32 angR = nxt_motor_get_count(1);
 //   S32 angL = nxt_motor_get_count(2);
 //   S32 angR_bak;
 //   S32 angL_bak;


	navigator_.Init();
    r_info = robot_.GetInfo();
    //angR = r_info.rot_encoderR_val;
    //angL = r_info.rot_encoderL_val;
	n_info = navigator_.GetInfo(r_info);
    // 最初のミッションを設定&初期化
    cur_mission_iter_ = this->mission_list_.Begin();
    if ( cur_mission_iter_ != this->mission_list_.End() ){
        (*cur_mission_iter_)->Init(r_info, n_info);
    } else {
        this->status_ = STATE_ERROR;
    }

    this->ClearEventFlag();

    SetRelAlarm(Alarm4msec, 1, DRIVE_PERIOD); // ドライブ用Alarmタイマーのセット

    // 走行開始
    // ステータスが運転中ならループを繰り返す
    while(this->status_ == STATE_DRIVING){
        //DEBUG_PRINT1("s", (*cur_mission_iter_)->Name());
        ClearEvent(EventDrive); // ドライブイベントのクリア
		WaitEvent(EventDrive);  // ドライブイベント待ち

        // タッチセンサON,もしくは転倒情報より走行停止
        if ( event_flag_.is_SetEvent(Robot::EVENT_TOUCH_SENSOR_ON) || event_flag_.is_SetEvent(Robot::EVENT_FAIL) ){
            status_ = STATE_WAIT_START;
            break;
        }

        // デバッグ用
        if ( event_flag_.is_SetEvent(Robot::EVENT_GYRO) ){
//            robot_.Beep();
        }
        if ( event_flag_.is_SetEvent(Robot::EVENT_GYRO2) ){
//            robot_.Beep();
        }

        if ( event_flag_.is_SetEvent(Robot::EVENT_SONAR_SENSOR_ON) ){
//            robot_.Beep();
        }

        r_info = robot_.GetInfo();
        n_info = navigator_.GetInfo(r_info);


        //prePos = now_position;
        //angR_bak = angR;
        //angL_bak = angL;
        //angR = r_info.rot_encoderR_val;

        //angL = r_info.rot_encoderL_val;
        //now_position = getPositionEstimation(prePos, angR - angR_bak, angL - angL_bak, r, d);

        while(1){
            ret = (*cur_mission_iter_)->Run(r_info, n_info, this->event_flag_, cmd);
            if ( ret == true ){
                robot_.Drive(cmd);
                break;
            } else if ( ret == false ){
                // 次のミッションに遷移
                ++cur_mission_iter_;
                if ( cur_mission_iter_ == mission_list_.End() ){
                    // ミッションリストがなくなったので終了
                    // ただし、最後のミッションは倒立したまま停止を続けるはずなので、
                    // 基本的にこの処理には入らない
                    this->status_ = STATE_COMPLETE;
                    break;
                } else {
                    (*cur_mission_iter_)->Init(r_info, n_info);
                    continue;
                }
            } else {
                // ここに入ることはないはず
                this->status_ = STATE_WAIT_START;
                break;
            }
        }

#if 1
        // Bluetooth データ送信
        if ( this->is_bt_connect_ ){
            robot_.BTSend(cmd, r_info, n_info);
            //robot_.BTSend(cmd, now_position);
        }
#endif

        this->ClearEventFlag();
    }

    robot_.Stop();
    this->ClearEventFlag();
    CancelAlarm(Alarm4msec);            // ドライブ用Alarmタイマーのキャンセル
    ClearEvent(EventDrive); // ドライブイベントのクリア
    return 0;
}