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
[email protected]
https://xenomai.org/mailman/listinfo/xenomai