All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai-help] help on alarms..
       [not found] <mailman.271.1146850846.2786.xenomai@xenomai.org>
@ 2006-05-07 20:33 ` Prashanti Bedapudi
  2006-05-07 21:11   ` Jim Cromie
  2006-05-07 22:26   ` Philippe Gerum
  0 siblings, 2 replies; 3+ messages in thread
From: Prashanti Bedapudi @ 2006-05-07 20:33 UTC (permalink / raw)
  To: xenomai

[-- Attachment #1: Type: text/plain, Size: 558 bytes --]

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


[-- Attachment #2: alarmtest.cpp --]
[-- Type: text/plain, Size: 1449 bytes --]

#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;
}

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Xenomai-help] help on alarms..
  2006-05-07 20:33 ` [Xenomai-help] help on alarms Prashanti Bedapudi
@ 2006-05-07 21:11   ` Jim Cromie
  2006-05-07 22:26   ` Philippe Gerum
  1 sibling, 0 replies; 3+ messages in thread
From: Jim Cromie @ 2006-05-07 21:11 UTC (permalink / raw)
  To: Prashanti Bedapudi; +Cc: xenomai

Prashanti Bedapudi wrote:
> Attached is a piece of code using alarms, but I am seeing some unexpected
> behavior.  Any help will be appreciated.
>
>   
have a look at src/testsuite/latency
it does what I believe youre seeking to do (tho I havent read your code)


> 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
>
>   



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Xenomai-help] help on alarms..
  2006-05-07 20:33 ` [Xenomai-help] help on alarms Prashanti Bedapudi
  2006-05-07 21:11   ` Jim Cromie
@ 2006-05-07 22:26   ` Philippe Gerum
  1 sibling, 0 replies; 3+ messages in thread
From: Philippe Gerum @ 2006-05-07 22:26 UTC (permalink / raw)
  To: Prashanti Bedapudi; +Cc: xenomai

Prashanti Bedapudi wrote:
> Attached is a piece of code using alarms, but I am seeing some unexpected
> behavior.  Any help will be appreciated.
> 

- bool quit_now = 0;
+ volatile bool quit_now = 0;

> 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@domain.hid
> https://mail.gna.org/listinfo/xenomai-help


-- 

Philippe.


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2006-05-07 22:26 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <mailman.271.1146850846.2786.xenomai@xenomai.org>
2006-05-07 20:33 ` [Xenomai-help] help on alarms Prashanti Bedapudi
2006-05-07 21:11   ` Jim Cromie
2006-05-07 22:26   ` Philippe Gerum

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.