int main(void) { RT_TASK *maint; MSG msg = { 0, 0 }; maint = rt_task_init(nam2num("MAIN"), 99, 0, 0); bx = rt_tbx_init(nam2num("BX"), TBXSIZE, ORDER); start_rt_timer(nano2count(TIMEBASE)); pthread_create(&pt1, NULL, Task1, NULL); pthread_create(&pt2, NULL, Task2, NULL); pthread_create(&pt3, NULL, Task3, NULL); pthread_create(&pt4, NULL, Task4, NULL); pthread_create(&pt5, NULL, Task5, NULL); pthread_create(&pt6, NULL, Task6, NULL); pthread_create(&pt7, NULL, Task7, NULL); printf("\ntasks started\n"); pthread_join(pt1, NULL); pthread_join(pt4, NULL); pthread_join(pt7, NULL); endall = 1; rt_tbx_broadcast(bx, (char*)&msg, sizeof(msg)); pthread_join(pt2, NULL); pthread_join(pt3, NULL); pthread_join(pt5, NULL); pthread_join(pt6, NULL); rt_tbx_delete(bx); rt_task_delete(maint); stop_rt_timer(); printf("\n\nEND\n\n"); return 0; }
static void Task4(long t) { int wakedup; rt_printk("\nTask4 (%p) starting\n", rt_whoami()); while (count < MAXCOUNT) { count++; wakedup = rt_tbx_broadcast(&bx, msg2, sizeof(msg2)); rt_printk("\nTask4=%lu, sending broadcast, wakedup=%d\n", count, wakedup); rt_sleep(nano2count(DELAY + SHIFT)); } rt_printk("\nTask4 suspends itself\n"); rt_task_suspend(rt_whoami()); }
static void Task4(long t) { int wakedup; MSG msg; rt_printk("\nTask4 (%p) starting\n", rt_whoami()); while (count < MAXCOUNT) { count++; msg.progressive = count; msg.sending_task = 4; wakedup = rt_tbx_broadcast(&bx, (char*)&msg, sizeof(msg)); rt_printk("\nTask4=%lu, sent broadcast, wakedup=%d\n", count, wakedup); rt_sleep(nano2count(DELAY + SHIFT)); } rt_printk("\nTask4 suspends itself\n"); rt_task_suspend(rt_whoami()); }
static void *Task4(void *arg) { RT_TASK *t4; int wakedup; MSG msg; t4 = rt_task_init_schmod(nam2num("T4"), BASE_PRIO + 6, 0, 0, SCHED_FIFO, 0xF); printf("\nTask4 (%p) starting\n", t4); mlockall(MCL_CURRENT | MCL_FUTURE); while (count < MAXCOUNT) { count++; msg.progressive = count; msg.sending_task = 4; wakedup = rt_tbx_broadcast(bx, (char*)&msg, sizeof(msg)); printf("\nTask4=%lu, sent broadcast, wakedup=%d\n", count, wakedup); rt_sleep(nano2count(DELAY + SHIFT)); } rt_task_delete(t4); printf("\nTask4 ends itself\n"); return 0; }