#include #include #include #include #include #include static RT_TASK task; static RT_TASK_MCB rcv_mcb = { 0, 0, NULL, 0 }; static RT_TASK_MCB rpl_mcb = { 0, 0, NULL, 0 }; static void receiver_task_main(void *data) { int handle, rc; while (1) { fprintf(stderr, "pre-rt_task_receive()\n"); handle = rt_task_receive(&rcv_mcb, TM_INFINITE); if (handle < 0) { fprintf(stderr, "rt_task_receive() error: %d (%s)\n", handle, strerror(-handle)); continue; } else fprintf(stderr, "rt_task_receive() handle: %d\n", handle); rc = rt_task_reply(handle, &rpl_mcb); if (rc < 0) fprintf(stderr, "rt_task_reply() error: %d (%s)\n", rc, strerror(-rc)); else fprintf(stderr, "Reply sent.\n"); } } int main(int argc, char **argv) { int rc; rc = mlockall(MCL_CURRENT | MCL_FUTURE); if (rc) { fprintf(stderr, "mlockall() failed: error %d (%s)\n", errno, strerror(errno)); return EXIT_FAILURE; } rc = rt_task_create(&task, "oops_test_main", 0, 50, T_JOINABLE); if (rc) { fprintf(stderr, "rt_task_create() failed\n"); return EXIT_FAILURE; } rc = rt_task_start(&task, receiver_task_main, NULL); if (rc) { fprintf(stderr, "rt_task_start() failed\n"); return EXIT_FAILURE; } rc = rt_task_join(&task); if (rc) { fprintf(stderr, "rt_task_join() failed\n"); return EXIT_FAILURE; } return EXIT_SUCCESS; }