42 #include <sys/types.h> 
   50 #define KEEP_STATIC_INLINE 
   52 #if defined (HAVE_RTAI_LXRT_H) 
   53 #include <rtai_lxrt.h> 
   56 #error "No rtai_lxrt_user and no rtai_lxrt within rtai" 
   60 main(
int argc, 
char* argv[])
 
   62         RT_TASK *logtask, *mbdtask;
 
   72         int dim = 
sizeof(
struct data);
 
   75         struct sched_param mysched;
 
   77         mysched.sched_priority = 1;
 
   80                 fprintf(stderr, 
"INVALID NUMBER OF ARGUMENTS: ARGC=%d\n" 
   82                         "USAGE: logproc <MBDTSK> <MBXLOG> <CPUMAP> <NONROOT>\n",
 
   89         CpuMap = atoi(argv[3]);
 
   90         if (strcasecmp(argv[4], 
"true") == 0) {
 
   91                 rt_allow_nonroot_hrt();
 
   93         } 
else if (strcasecmp(argv[4], 
"false" ) != 0) {
 
   94                 fprintf(stderr, 
"INVALID VALUE \"%s\" FOR NONROOT\n", argv[4]);
 
   98         if (sched_setscheduler(0, SCHED_FIFO, &mysched) == -1) {
 
   99                 fputs(
"ERROR IN SETTING THE SCHEDULER UP", stderr);
 
  104         mlockall(MCL_CURRENT | MCL_FUTURE);
 
  106         if (!(logtask = rt_task_init_schmod(nam2num(
"LTSK"), 20, 0, 0,
 
  107                         SCHED_FIFO, CpuMap)))
 
  109                 fputs(
"CANNOT INIT LOG TASK\n", stderr);
 
  113         if (!(mbdtask = rt_get_adr(nam2num(mbdynname)))) {
 
  114                 fprintf(stderr, 
"CANNOT FIND MBDyn TASK \"%s\"\n", mbdynname);
 
  118         rt_task_resume(mbdtask);
 
  120         if (!(mbxlog = rt_get_adr(nam2num(mbxname)))) {
 
  121                 fprintf(stderr, 
"CANNOT FIND LOG MBX\n");
 
  125         printf(
"\n" "OVERRUNS MONITOR:\n");
 
  126         printf(
"             step     t [ns]\n");
 
  127         while (!rt_mbx_receive(mbxlog, &msg, dim)) {
 
  130                 printf(
"%8d %8d %10d\n", i, msg.step, msg.time);
 
  133         rt_sleep(nano2count(1000000000));
 
  134         rt_task_delete(logtask);
 
  135         printf(
"\n\n" "OVERRUNS MONITOR:\n");
 
  136         printf(
"Total overruns detected: %d\n", i);
 
  137         printf(
"Mean overruns time: %6.2lf ns\n",
 
  138                 i ? ((
double)time)/((
double)i) : 0.);
 
  139         printf(
"End of overruns monitor.\n");
 
int main(int argc, char *argv[])