user_alarm.c

00001 #include <sys/mman.h>
00002 #include <native/task.h>
00003 #include <native/alarm.h>
00004 
00005 #define TASK_PRIO  99 /* Highest RT priority */
00006 #define TASK_MODE  0  /* No flags */
00007 #define TASK_STKSZ 0  /* Stack size (use default one) */
00008 
00009 #define ALARM_VALUE    500000   /* First shot at now + 500 us */
00010 #define ALARM_INTERVAL 250000   /* Period is 250 us */
00011 
00012 RT_ALARM alarm_desc;
00013 
00014 RT_TASK server_desc;
00015 
00016 void alarm_server (void *cookie)
00017 
00018 {
00019     for (;;) {
00020 
00021        /* Wait for the next alarm to trigger. */
00022        err = rt_alarm_wait(&alarm_desc);
00023 
00024        if (!err) {
00025            /* Process the alarm shot. */
00026        }
00027     }
00028 }
00029 
00030 int main (int argc, char *argv[])
00031 
00032 {
00033     int err;
00034 
00035     mlockall(MCL_CURRENT|MCL_FUTURE);
00036 
00037     /* ... */
00038 
00039     err = rt_alarm_create(&alarm_desc,"MyAlarm");
00040 
00041     err = rt_alarm_start(&alarm_desc,
00042                          ALARM_VALUE,
00043                          ALARM_INTERVAL);
00044     /* ... */
00045 
00046     err = rt_task_create(&server_desc,
00047                          "MyAlarmServer",
00048                          TASK_STKSZ,
00049                          TASK_PRIO,
00050                          TASK_MODE);
00051     if (!err)
00052         rt_task_start(&server_desc,&alarm_server,NULL);
00053 
00054     /* ... */
00055 }
00056 
00057 void cleanup (void)
00058 
00059 {
00060     rt_alarm_delete(&alarm_desc);
00061     rt_task_delete(&server_desc);
00062 }

Generated on Mon Mar 24 18:02:40 2008 for Xenomai API by  doxygen 1.5.3