Attached is a piece of code using alarms, but I am seeing some unexpected behavior. Any help will be appreciated.
in function main() the program behaves two different ways depending on where I have the last printf() 1. It works fine and terminates as expected if I have it like this while(!quit_now) printf("quit_now = %d\n", quit_now); 2. It does not terminate if I have it this way. I know quit_now is set to 1, since the last statement printed is 'quit_now is set to 1'. while(!quit_now); printf("quit_now = %d\n", quit_now); thanks, Shanti
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/wait.h> #include <signal.h> #include <native/types.h> #include <native/alarm.h> #include <native/task.h> #define ALARM_NAME "dl_alarm2" #define ALARM_TASK_NAME "dl_alarm_task" #define ALARM_TIME 500000 #define ALARM_INTERVAL 250000 #define ALARM_TASK_PRIO 20 RT_ALARM dl_alarm; RT_TASK alarm_task; bool quit_now = 0; void catch_signal(int sig) { rt_alarm_stop(&dl_alarm); rt_alarm_delete(&dl_alarm); rt_task_delete(&alarm_task); exit(0); } static void alarm_handler(void *cookie) { int i =0; printf("Inside alarm handler\n "); for(i = 0; i<100; i++){ rt_alarm_wait(&dl_alarm); printf("i = %d\n",i); } quit_now = 1; printf("quit_now is set to %d\n",quit_now); return; } int main() { int ret = 0; signal(SIGTERM, catch_signal); signal(SIGINT, catch_signal); ret = rt_alarm_create(&dl_alarm, ALARM_NAME) ; if (ret) printf("\ncannot create alarm %d\n", ret); ret = rt_task_spawn(&alarm_task, ALARM_TASK_NAME, 0, ALARM_TASK_PRIO, 0, &alarm_handler, NULL); if(ret) exit(0); rt_alarm_start(&dl_alarm, ALARM_TIME, ALARM_INTERVAL); while(!quit_now); printf("quit_now = %d\n",quit_now); rt_alarm_stop(&dl_alarm); rt_alarm_delete(&dl_alarm); rt_task_delete(&alarm_task); return 0; }
_______________________________________________ Xenomai-help mailing list Xenomai-help@gna.org https://mail.gna.org/listinfo/xenomai-help