Hi, there
I am trying to make the main thread real-time and periodic through rt_task_shadow and rt_task_set_periodic, but after that I can not catch the SIGINT signal (Ctrl+C) in the main thread. I tried the rt_task_catch function, while the ld returns: undefined reference to ‘rt_task_catch’. My questions are: 1. Is it possible to catch the SIGINT signal in a realtime task other than rt_task_catch? 2. Why the rt_task_catch can no be linked? Did I miss some necessary lib? yours: Kira Yamato 2018-04-19 ************************************************************************************************************************************ The environment is: Ubuntu 14.04 x86_64 + Kernel 3.14.17 + Xenomai 2.6.4 The build command I used is: ************************************************************************************************************************************ gcc -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -D__XENO__ XenomaiPeriodic.c -Xlinker -rpath -Xlinker /usr/xenomai/lib -lnative -L/usr/xenomai/lib -lxenomai -lpthread -lrt -o XenomaiPeriodic ************************************************************************************************************************************ The skeleton of the XenomaiPeriodic.c is as following: ************************************************************************************************************************************ #include <stdio.h> #include <signal.h> #include <unistd.h> #include <sys/mman.h> #include <native/task.h> #include <native/timer.h> RT_TASK demo_task; #define _PERIOD_NS_ 1000000 void demo(void *arg) { rt_task_set_periodic(NULL, TM_NOW, _PERIOD_NS_); while (1) { rt_task_wait_period(NULL); } } void catch_signal(int sig) { } void* my_catch_signal(rt_sigset_t sig) { return NULL; } void handler(rt_sigset_t sigset){ return NULL; } int main(int argc, char* argv[]) { signal(SIGTERM, catch_signal); signal(SIGINT, catch_signal); /* Avoids memory swapping for this program */ mlockall(MCL_CURRENT | MCL_FUTURE); RT_TASK main_task; int main_prio = 99; int main_mode = T_FPU | T_CPU(1); int ret = rt_task_shadow(&main_task, "maintask", main_prio, main_mode); rt_task_catch ( handler ); rt_task_create(&demo_task, "trivial", 0, 99, T_CPU(3)); rt_task_start(&demo_task, &demo, NULL); RTIME set_period = 4000000; ret = rt_task_set_periodic( NULL, TM_NOW, set_period); signal(SIGTERM, catch_signal); signal(SIGINT, catch_signal); while (1) { rt_task_wait_period(NULL); } pause(); rt_task_delete(&demo_task); return 0; } ************************************************************************************************************************************ _______________________________________________ Xenomai mailing list Xenomai@xenomai.org https://xenomai.org/mailman/listinfo/xenomai