/*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); }
/*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); }
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); }
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); }
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; }
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; }
/*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); }
/*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(); }
/*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) ; }
/** 走行中の処理 */ 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; }