int main(void) { int i, srq, count = 0, nextcount = 0, repeat; rt_thread_init(nam2num("MNTSK"), 100, 0, SCHED_FIFO, 0x1); rt_printk("\nTESTING THE SCHEDULER WITH SRQs [%d LOOPs].\n", LOOPS); repeat = 1000000000LL/((long long)DELAY*(long long)PRINT_FREQ); srq = rtai_open_srq(0xcacca); start_rt_timer(0); rt_grow_and_lock_stack(100000); #ifdef MAKE_HARD MAKE_HARD(); #endif for (i = 0; i < LOOPS; i++) { rtai_srq(srq, (unsigned long)nano2count(DELAY)); if (++count > nextcount) { nextcount += repeat; rt_printk(">>> %d.\n", nextcount); } } rt_make_soft_real_time(); stop_rt_timer(); rt_task_delete(NULL); rt_printk("END SCHEDULER TEST WITH SRQs.\n\n"); return 0; }
void task2(void) { int i; rt_thread_init(nam2num("TASK2"), 2, 0, SCHED_FIFO, 0x1); rt_grow_and_lock_stack(STACK_SIZE - 10000); #ifdef MAKE_HARD MAKE_HARD(); #endif rt_printk("TASK2 TID = %d.\n\n", rt_gettid()); rt_printk("TESTING FAILING WAIT IF ......"); for (i = 0; i < LOOPS; i++) { if (rt_sem_wait_if(sem2) > 0) { break; } } rt_printk(" %s OK.\n", i == LOOPS ? "" : "NOT"); rt_printk("TESTING SUCCEEDING WAIT IF ..."); rt_sem_signal(sem2); for (i = 0; i < LOOPS; i++) { if (rt_sem_wait_if(sem2) == 1) { rt_sem_signal(sem2); } else { break; } } rt_printk(" %s OK.\n", i == LOOPS ? "" : "NOT"); rt_printk("TESTING WAIT/SIGNAL .........."); rt_sem_wait(sem2); for (i = 0; i < LOOPS; i++) { rt_sem_signal(sem1); if (rt_sem_wait(sem2) == 0) { break; } } rt_printk(" %s OK.\n", i == LOOPS ? "" : "NOT"); rt_task_delete(NULL); rt_printk("\nTASK2 EXITING : "); return; }
void task1(void) { rt_thread_init(nam2num("TASK1"), 1, 0, SCHED_FIFO, 0x1); rt_grow_and_lock_stack(STACK_SIZE - 10000); #ifdef MAKE_HARD MAKE_HARD(); #endif rt_make_hard_real_time(); rt_printk("TASK1 TID = %d : ", rt_gettid()); while (!end) { rt_sem_wait(sem1); rt_sem_signal(sem2); } rt_task_delete(NULL); rt_printk("TASK1 EXITING.\n"); return; }