static void ClockChrono_Chrono(long t) { RTIME OneUnit = nano2count(ONE_UNIT); MenageHmsh_tHour times; MenageHmsh_tChain11 timesChain; BOOLEAN Intermediatetimes = FALSE; MenageHmsh_tHour endIntermediateTimes; BOOLEAN display; BOOLEAN hundredthes = FALSE; char command; unsigned long msg; rt_receive(&read, &msg); command = 'R'; while(1) { cpu_used[hard_cpu_id()]++; switch(command) { case 'R': MenageHmsh_Initialise(×); display = TRUE; hundredthes = FALSE; Intermediatetimes = FALSE; break; case 'C': rt_fractionated_sleep(OneUnit); MenageHmsh_PlusOneUnit(×, &display); if (Intermediatetimes) { Intermediatetimes = !MenageHmsh_Equal( times, endIntermediateTimes); display = !Intermediatetimes; hundredthes = FALSE; } break; case 'I': Intermediatetimes = TRUE; endIntermediateTimes = times; MenageHmsh_PlusNSeconds(3, &endIntermediateTimes); display = TRUE; hundredthes = TRUE; break; case 'E': display = TRUE; hundredthes = TRUE; } if (display) { MenageHmsh_Convert(times, hundredthes, ×Chain); Display_PutTimes(timesChain); } CommandChrono_Get(&command); } }
void *ClockChrono_Chrono(void *args) { RT_TASK *mytask /*, *keybrd */; MenageHmsh_tHour times; MenageHmsh_tChain11 timesChain; BOOLEAN Intermediatetimes = FALSE; MenageHmsh_tHour endIntermediateTimes; BOOLEAN display; BOOLEAN hundredthes = FALSE; char command; if (!(mytask = rt_thread_init(nam2num("CHRONO"), 1, 0, SCHED_FIFO, 0xF))) { printf("CANNOT INIT TASK ClockChronoChrono\n"); exit(1); } printf("INIT TASK ClockChronoChrono %p.\n", mytask); mlockall(MCL_CURRENT | MCL_FUTURE); rt_make_hard_real_time(); sem_wait(&sync_sem); command = 'R'; while(1) { switch(command) { case 'R': MenageHmsh_Initialise(×); display = TRUE; hundredthes = FALSE; Intermediatetimes = FALSE; break; case 'C': rt_fractionated_sleep(OneUnit); MenageHmsh_PlusOneUnit(×, &display); if (Intermediatetimes) { Intermediatetimes = !MenageHmsh_Equal( times, endIntermediateTimes); display = !Intermediatetimes; hundredthes = FALSE; } break; case 'I': Intermediatetimes = TRUE; endIntermediateTimes = times; MenageHmsh_PlusNSeconds(3, &endIntermediateTimes); display = TRUE; hundredthes = TRUE; break; case 'E': display = TRUE; hundredthes = TRUE; break; case 'F': goto end; } if (display) { MenageHmsh_Convert(times, hundredthes, ×Chain); Display_PutTimes(timesChain); } CommandChrono_Get(&command); } end: rt_make_soft_real_time(); rt_task_delete(mytask); printf("END TASK ClockChronoChrono %p.\n", mytask); return 0; }