int main(int argc, char *argv[]) { TASK_ID rtid, ptid; copperplate_init(argc, argv); traceobj_init(&trobj, argv[0], sizeof(tseq) / sizeof(int)); rtid = taskSpawn("rootTask", 50, 0, 0, rootTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); traceobj_assert(&trobj, rtid != ERROR); traceobj_mark(&trobj, 18); ptid = taskSpawn("peerTask", 10, 0, 0, peerTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); traceobj_assert(&trobj, ptid != ERROR); traceobj_mark(&trobj, 19); traceobj_join(&trobj); traceobj_verify(&trobj, tseq, sizeof(tseq) / sizeof(int)); exit(0); }
int main(int argc, char *const argv[]) { TASK_ID rtid, ptid; traceobj_init(&trobj, argv[0], sizeof(tseq) / sizeof(int)); traceobj_mark(&trobj, 11); rtid = taskSpawn("rootTask", 50, 0, 0, rootTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); traceobj_assert(&trobj, rtid != ERROR); traceobj_mark(&trobj, 12); ptid = taskSpawn("peerTask", 51, 0, 0, peerTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); traceobj_assert(&trobj, ptid != ERROR); traceobj_mark(&trobj, 13); traceobj_join(&trobj); traceobj_verify(&trobj, tseq, sizeof(tseq) / sizeof(int)); exit(0); }
static void task_B(u_long a0, u_long a1, u_long a2, u_long a3) { u_long msgbuf[4]; int ret, n; traceobj_enter(&trobj); traceobj_assert(&trobj, a0 == 1); traceobj_assert(&trobj, a1 == 2); traceobj_assert(&trobj, a2 == 3); traceobj_assert(&trobj, a3 == 4); traceobj_mark(&trobj, 4); for (n = 0; n < 3; n++) { ret = q_receive(qid, Q_WAIT, 10, msgbuf); traceobj_mark(&trobj, 5); traceobj_assert(&trobj, ret == SUCCESS); traceobj_assert(&trobj, msgbuf[0] == n + 1); traceobj_assert(&trobj, msgbuf[1] == n + 2); traceobj_assert(&trobj, msgbuf[2] == n + 3); traceobj_assert(&trobj, msgbuf[3] == n + 4); } traceobj_mark(&trobj, 6); traceobj_exit(&trobj); }
static void foregroundTask(long a1, long a2, long a3, long a4, long a5, long a6, long a7, long a8, long a9, long a10) { int ret; traceobj_enter(&trobj); traceobj_mark(&trobj, 4); ret = semTake(sem_id, WAIT_FOREVER); traceobj_assert(&trobj, ret == OK); traceobj_mark(&trobj, 5); taskDelay(3); traceobj_mark(&trobj, 6); ret = taskSuspend(btid); traceobj_assert(&trobj, ret == OK); traceobj_mark(&trobj, 7); traceobj_exit(&trobj); }
static void rootTask(long a0, long a1, long a2, long a3, long a4, long a5, long a6, long a7, long a8, long a9) { int ret; traceobj_enter(&trobj); traceobj_mark(&trobj, 1); sem_id = semBCreate(SEM_Q_FIFO, SEM_FULL); traceobj_assert(&trobj, sem_id != 0); ret = semGive(sem_id); traceobj_assert(&trobj, ret == OK); traceobj_mark(&trobj, 2); ret = semTake(sem_id, NO_WAIT); traceobj_assert(&trobj, ret == OK); traceobj_mark(&trobj, 3); ret = semTake(sem_id, WAIT_FOREVER); traceobj_assert(&trobj, ret == ERROR && errno == S_objLib_OBJ_DELETED); traceobj_mark(&trobj, 4); traceobj_exit(&trobj); }
static void main_task(void *arg) { RT_TASK *p; int ret; traceobj_enter(&trobj); p = rt_task_self(); traceobj_assert(&trobj, p != NULL && rt_task_same(p, &t_main)); traceobj_mark(&trobj, 5); ret = rt_alarm_start(&alrm, 200000000ULL, 200000000ULL); traceobj_check(&trobj, ret, 0); traceobj_mark(&trobj, 6); ret = rt_task_suspend(&t_main); traceobj_check(&trobj, ret, 0); traceobj_mark(&trobj, 7); ret = rt_alarm_delete(&alrm); traceobj_check(&trobj, ret, 0); traceobj_exit(&trobj); }
static void backgroundTask(long a1, long a2, long a3, long a4, long a5, long a6, long a7, long a8, long a9, long a10) { unsigned int safety = 100000000, count = 0; int ret; traceobj_enter(&trobj); traceobj_mark(&trobj, 1); ret = semTake(sem_id, WAIT_FOREVER); traceobj_assert(&trobj, ret == OK); traceobj_mark(&trobj, 2); while (--safety > 0) count++; /* * Force a pause so that any pending cancellation is taken * regardless of whether async-cancel is enabled or not. */ pause(); traceobj_mark(&trobj, 3); traceobj_exit(&trobj); }
int main(int argc, char *argv[]) { TASK_ID tid; int ret; copperplate_init(argc, argv); traceobj_init(&trobj, argv[0], sizeof(tseq) / sizeof(int)); tid = taskSpawn("rootTask", 50, 0, 0, rootTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); traceobj_assert(&trobj, tid != ERROR); traceobj_mark(&trobj, 5); ret = semDelete(sem_id); traceobj_assert(&trobj, ret == OK); traceobj_mark(&trobj, 6); traceobj_join(&trobj); traceobj_verify(&trobj, tseq, sizeof(tseq) / sizeof(int)); exit(0); }
int main(int argc, char *argv[]) { u_long args[] = { 1, 2, 3, 4 }; int ret; copperplate_init(argc, argv); traceobj_init(&trobj, argv[0], sizeof(tseq) / sizeof(int)); traceobj_mark(&trobj, 1); ret = t_create("TASK", 20, 0, 0, 0, &tid); traceobj_assert(&trobj, ret == SUCCESS); ret = t_start(tid, 0, task, args); traceobj_assert(&trobj, ret == SUCCESS); traceobj_mark(&trobj, 2); traceobj_join(&trobj); traceobj_verify(&trobj, tseq, sizeof(tseq) / sizeof(int)); exit(0); }
static void test_task(void *arg) { int ret; traceobj_enter(&trobj); traceobj_mark(&trobj, 6); ret = rt_sem_p(&sem, TM_INFINITE); traceobj_check(&trobj, ret, 0); traceobj_mark(&trobj, 7); traceobj_exit(&trobj); }
static void rootTask(long a0, long a1, long a2, long a3, long a4, long a5, long a6, long a7, long a8, long a9) { TASK_ID tid; int ret, n; traceobj_enter(&trobj); qid = msgQCreate(NMESSAGES, sizeof(int), MSG_Q_PRIORITY); traceobj_assert(&trobj, qid != 0); traceobj_mark(&trobj, 3); ret = taskPrioritySet(taskIdSelf(), 10); traceobj_assert(&trobj, ret == OK); traceobj_mark(&trobj, 4); tid = taskSpawn("peerTask", 11, 0, 0, peerTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); traceobj_assert(&trobj, tid != ERROR); traceobj_mark(&trobj, 5); n = 0; do ret = msgQSend(qid, (char *)&messages[n], sizeof(int), NO_WAIT, MSG_PRI_URGENT); while(n++ < NMESSAGES && ret != ERROR); traceobj_assert(&trobj, ret == ERROR && errno == S_objLib_OBJ_UNAVAILABLE && n == NMESSAGES + 1); traceobj_mark(&trobj, 6); ret = taskDelay(10); traceobj_assert(&trobj, ret == OK); traceobj_mark(&trobj, 7); ret = msgQNumMsgs(qid); traceobj_assert(&trobj, ret == 0); traceobj_verify(&trobj, tseq, sizeof(tseq) / sizeof(int)); traceobj_exit(&trobj); }
int main(int argc, char *argv[]) { u_long args[] = { 1, 2, 3, 4 }, msgbuf[4], count; int ret, n; copperplate_init(argc, argv); traceobj_init(&trobj, argv[0], sizeof(tseq) / sizeof(int)); ret = q_create("QUEUE", Q_NOLIMIT, 0, &qid); traceobj_assert(&trobj, ret == SUCCESS); ret = t_create("TSKA", 21, 0, 0, 0, &tidA); traceobj_assert(&trobj, ret == SUCCESS); ret = t_create("TSKB", 20, 0, 0, 0, &tidB); traceobj_assert(&trobj, ret == SUCCESS); ret = t_start(tidA, 0, task_A, args); traceobj_assert(&trobj, ret == SUCCESS); ret = t_start(tidB, 0, task_B, args); traceobj_assert(&trobj, ret == SUCCESS); for (n = 0; n < 3; n++) { msgbuf[0] = n + 1; msgbuf[1] = n + 2; msgbuf[2] = n + 3; msgbuf[3] = n + 4; count = 0; traceobj_mark(&trobj, 7); ret = q_broadcast(qid, msgbuf, &count); traceobj_assert(&trobj, ret == SUCCESS && count == 2); } traceobj_mark(&trobj, 8); traceobj_join(&trobj); traceobj_verify(&trobj, tseq, sizeof(tseq) / sizeof(int)); ret = q_delete(qid); traceobj_assert(&trobj, ret == SUCCESS); exit(0); }
static void peerTask(long a0, long a1, long a2, long a3, long a4, long a5, long a6, long a7, long a8, long a9) { int ret, msg, n; traceobj_enter(&trobj); n = 1; do { traceobj_mark(&trobj, 1); ret = msgQReceive(qid, (char *)&msg, sizeof(int), NO_WAIT); traceobj_assert(&trobj, ret == sizeof(int)); traceobj_assert(&trobj, msg == messages[NMESSAGES - n]); traceobj_mark(&trobj, 2); } while(n++ < NMESSAGES); traceobj_exit(&trobj); }
int main(int argc, char *const argv[]) { int ret; traceobj_init(&trobj, argv[0], sizeof(tseq) / sizeof(int)); sem_id = semCCreate(SEM_Q_PRIORITY, 0); traceobj_assert(&trobj, sem_id != 0); traceobj_mark(&trobj, 8); btid = taskSpawn("backgroundTask", 11, 0, 0, backgroundTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); traceobj_assert(&trobj, btid != ERROR); traceobj_mark(&trobj, 9); ftid = taskSpawn("foregroundTask", 10, 0, 0, foregroundTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); traceobj_assert(&trobj, ftid != ERROR); traceobj_mark(&trobj, 10); ret = semGive(sem_id); traceobj_assert(&trobj, ret == OK); traceobj_mark(&trobj, 11); ret = semGive(sem_id); traceobj_assert(&trobj, ret == OK); traceobj_mark(&trobj, 12); ret = taskDelete(btid); traceobj_assert(&trobj, ret == OK); traceobj_join(&trobj); traceobj_verify(&trobj, tseq, sizeof(tseq) / sizeof(int)); exit(0); }
static void peerTask(long a0, long a1, long a2, long a3, long a4, long a5, long a6, long a7, long a8, long a9) { int ret, msg; traceobj_enter(&trobj); traceobj_mark(&trobj, 8); ret = msgQReceive(qid, (char *)&msg, sizeof(int), WAIT_FOREVER); traceobj_assert(&trobj, ret == sizeof(int) && msg == 0); traceobj_mark(&trobj, 9); ret = msgQDelete(qid); traceobj_assert(&trobj, ret == OK); traceobj_mark(&trobj, 10); traceobj_exit(&trobj); }
static void alarm_handler(void *arg) { static int hits; int ret; traceobj_assert(&trobj, arg == &alrm); traceobj_mark(&trobj, 1); if (++hits >= 3) { ret = rt_alarm_stop(&alrm); traceobj_check(&trobj, ret, 0); traceobj_mark(&trobj, 2); ret = rt_task_resume(&t_main); traceobj_check(&trobj, ret, 0); traceobj_mark(&trobj, 3); return; } traceobj_mark(&trobj, 4); }
int main(int argc, char *const argv[]) { int ret; traceobj_init(&trobj, argv[0], sizeof(tseq) / sizeof(int)); ret = rt_sem_create(&sem, "SEMA", 0, S_FIFO); traceobj_check(&trobj, ret, 0); ret = rt_task_create(&t_test, "test_task", 0, 10, 0); traceobj_check(&trobj, ret, 0); traceobj_mark(&trobj, 1); ret = rt_task_start(&t_test, test_task, NULL); traceobj_check(&trobj, ret, 0); traceobj_mark(&trobj, 2); ret = rt_task_suspend(&t_test); traceobj_check(&trobj, ret, 0); traceobj_mark(&trobj, 3); ret = rt_sem_v(&sem); traceobj_check(&trobj, ret, 0); traceobj_mark(&trobj, 4); ret = rt_task_resume(&t_test); traceobj_check(&trobj, ret, 0); traceobj_mark(&trobj, 5); traceobj_join(&trobj); traceobj_verify(&trobj, tseq, sizeof(tseq) / sizeof(int)); exit(0); }
static void task(u_long a0, u_long a1, u_long a2, u_long a3) { unsigned long date, time, ticks; int ret; traceobj_enter(&trobj); traceobj_mark(&trobj, 3); ret = tm_set(TEST_DATE, TEST_TIME, TEST_TICKS); traceobj_assert(&trobj, ret == SUCCESS); ret = tm_wkwhen(WAKEUP_DATE, WAKEUP_TIME, WAKEUP_TICKS); traceobj_assert(&trobj, ret == SUCCESS); ret = tm_get(&date, &time, &ticks); traceobj_assert(&trobj, ret == SUCCESS); traceobj_assert(&trobj, date == WAKEUP_DATE); traceobj_assert(&trobj, time == WAKEUP_TIME); traceobj_mark(&trobj, 4); traceobj_exit(&trobj); }
static void rootTask(long a0, long a1, long a2, long a3, long a4, long a5, long a6, long a7, long a8, long a9) { int ret, msg, n; traceobj_enter(&trobj); traceobj_mark(&trobj, 1); qid = msgQCreate(NMESSAGES, sizeof(msg), MSG_Q_FIFO); traceobj_assert(&trobj, qid != 0); traceobj_mark(&trobj, 2); for (msg = 0; msg < NMESSAGES; msg++) { ret = msgQSend(qid, (char *)&msg, sizeof(msg), NO_WAIT, MSG_PRI_NORMAL); traceobj_assert(&trobj, ret == OK); } traceobj_mark(&trobj, 3); ret = msgQSend(qid, (char *)&msg, sizeof(msg), WAIT_FOREVER, MSG_PRI_URGENT); traceobj_assert(&trobj, ret == OK); traceobj_mark(&trobj, 4); ret = msgQReceive(qid, (char *)&msg, sizeof(int), WAIT_FOREVER); traceobj_assert(&trobj, ret == sizeof(int) && msg == 10); traceobj_mark(&trobj, 5); for (n = 1; n < NMESSAGES; n++) { /* peer task read #0 already. */ ret = msgQReceive(qid, (char *)&msg, sizeof(int), WAIT_FOREVER); traceobj_assert(&trobj, ret == sizeof(int) && msg == n); } traceobj_mark(&trobj, 6); ret = msgQReceive(qid, (char *)&msg, sizeof(int), WAIT_FOREVER); traceobj_assert(&trobj, ret == ERROR && errno == S_objLib_OBJ_DELETED); traceobj_mark(&trobj, 7); traceobj_exit(&trobj); }
int main(int argc, char *const argv[]) { int ret; traceobj_init(&trobj, argv[0], sizeof(tseq) / sizeof(int)); ret = rt_alarm_create(&alrm, "ALARM", alarm_handler, &alrm); traceobj_check(&trobj, ret, 0); ret = rt_task_spawn(&t_main, "main_task", 0, 50, 0, main_task, NULL); traceobj_check(&trobj, ret, 0); traceobj_mark(&trobj, 8); traceobj_join(&trobj); traceobj_verify(&trobj, tseq, sizeof(tseq) / sizeof(int)); exit(0); }
static void peerTask(long a0, long a1, long a2, long a3, long a4, long a5, long a6, long a7, long a8, long a9) { TASK_ID rtid; int ret; traceobj_enter(&trobj); traceobj_mark(&trobj, 1); rtid = taskNameToId("rootTask"); traceobj_assert(&trobj, rtid != ERROR); traceobj_mark(&trobj, 2); ret = semTake(sem_id, NO_WAIT); traceobj_assert(&trobj, ret == ERROR && errno == S_objLib_OBJ_UNAVAILABLE); traceobj_mark(&trobj, 3); ret = semTake(sem_id, 100); traceobj_assert(&trobj, ret == ERROR && errno == S_objLib_OBJ_TIMEOUT); traceobj_mark(&trobj, 4); ret = taskResume(rtid); traceobj_assert(&trobj, ret == OK); traceobj_mark(&trobj, 5); ret = semTake(sem_id, WAIT_FOREVER); traceobj_assert(&trobj, ret == OK); traceobj_mark(&trobj, 6); traceobj_exit(&trobj); }
static void task(u_long a0, u_long a1, u_long a2, u_long a3) { u_long events; int ret; traceobj_enter(&trobj); traceobj_mark(&trobj, 1); ret = tm_evafter(200, 0x1, &timer_id); traceobj_assert(&trobj, ret == SUCCESS); traceobj_mark(&trobj, 2); ret = ev_receive(0x3, EV_WAIT|EV_ALL, 300, &events); traceobj_assert(&trobj, ret == ERR_TIMEOUT); traceobj_mark(&trobj, 3); ret = ev_receive(0x2, EV_NOWAIT|EV_ANY, 0, &events); traceobj_assert(&trobj, ret == ERR_NOEVS); traceobj_mark(&trobj, 4); events = 0; ret = ev_receive(0x1, EV_NOWAIT|EV_ALL, 0, &events); traceobj_assert(&trobj, ret == SUCCESS && events == 0x1); traceobj_mark(&trobj, 5); events = 0; ret = ev_receive(0x1, EV_WAIT|EV_ALL, 400, &events); traceobj_assert(&trobj, ret == ERR_TIMEOUT); traceobj_mark(&trobj, 6); ret = tm_cancel(timer_id); traceobj_assert(&trobj, ret == ERR_BADTMID); traceobj_exit(&trobj); }
static void rootTask(long a0, long a1, long a2, long a3, long a4, long a5, long a6, long a7, long a8, long a9) { int ret; traceobj_enter(&trobj); traceobj_mark(&trobj, 6); ret = taskPrioritySet(taskIdSelf(), 11); traceobj_assert(&trobj, ret == OK); traceobj_mark(&trobj, 7); sem_id = semMCreate(0xffffffff); traceobj_assert(&trobj, sem_id == 0 && errno == S_semLib_INVALID_OPTION); traceobj_mark(&trobj, 8); sem_id = semMCreate(SEM_Q_PRIORITY|SEM_DELETE_SAFE|SEM_INVERSION_SAFE); traceobj_assert(&trobj, sem_id != 0); traceobj_mark(&trobj, 9); ret = semTake(sem_id, WAIT_FOREVER); traceobj_assert(&trobj, ret == OK); traceobj_mark(&trobj, 10); ret = semTake(sem_id, WAIT_FOREVER); traceobj_assert(&trobj, ret == OK); traceobj_mark(&trobj, 11); ret = semGive(sem_id); traceobj_assert(&trobj, ret == OK); traceobj_mark(&trobj, 12); ret = semGive(sem_id); traceobj_assert(&trobj, ret == OK); traceobj_mark(&trobj, 13); ret = semGive(sem_id); traceobj_assert(&trobj, ret == ERROR && errno == S_semLib_INVALID_OPERATION); traceobj_mark(&trobj, 14); ret = semTake(sem_id, WAIT_FOREVER); traceobj_assert(&trobj, ret == OK); traceobj_mark(&trobj, 15); ret = taskSuspend(taskIdSelf()); traceobj_assert(&trobj, ret == OK); traceobj_mark(&trobj, 16); ret = semGive(sem_id); traceobj_assert(&trobj, ret == OK); traceobj_mark(&trobj, 17); traceobj_exit(&trobj); }