What hardware are you running this on and with what rtl version? I'll try
to reproduce the problem with some details.
} I posted this same problem a couple days ago, and would like to thank
} those of you who helped out, but my glitch still exists. Every now and
} again, my system hangs for ~1ms. Running a periodic thread of any period,
} the glitch is always the same duration: 1.1 to 1.3 ms on one machine or
} .5 to .6 ms on another. I think it's safe to say that the glitch is
} prohibiting me from doing hard realtime processing.
}
} The code below is very short and simple. It compiles with the standard
} options available as variables in rtl.mk, and the module depends on
} rtl_sched and rtl_time. All you have to do is compile, insert, wait(for me
} 30 seconds is enough), and dmesg.
}
} Typical dmesg output
}
} > Delay of 192ns near 0ms
} > Delay of 288ns near 95ms
} > Delay of 352ns near 1609ms
} > Delay of 384ns near 1648ms
} > Delay of 448ns near 23322ms
} > Delay of 1141792ns near 937517ms
} > Delay of 1224000ns near 1530446ms
}
} You see the two vastly different scales. The first 5 maximum delays are
} fractions of a microsecond, no problem. The later 2 delays are >100
} periods of the periodic task!
}
} Any advice would be greatly appreciated.
} Thanks in advance - Chuck
}
}
} // Stipped down DAQ code - Chuck
}
} // ***** System headers ***** //
} #include <rtl.h>
} #include <rtl_sync.h>
} #include <time.h>
} #include <pthread.h>
}
} // ***** System Definitions ***** //
} #define FREQUENCY 100000 // Thread frequency [=] Hz
}
} // ***** Function Declarations ***** //
} void *daq_code(void*); // DAQ Periodic function
}
} // ***** Global Variables ***** //
} pthread_t daq_thread; // main rtlinux thread
}
}
} // Simple thread measures clock
} void *daq_code(void *param)
} {
} rtl_irqstate_t irqstate;
}
} hrtime_t zero_time, tick_time, tock_time;
} long delay_time, delay, max_delay=0;
}
} zero_time = clock_gethrtime(CLOCK_REALTIME); // module insert time
}
} while (1) // periodic task, must loop
} {
}
} // Begin DANGER
} rtl_no_interrupts(irqstate); // disable all interrupts
}
} tick_time = clock_gethrtime(CLOCK_REALTIME); //check time
} tock_time = clock_gethrtime(CLOCK_REALTIME); //check time
} delay = (long)(tock_time - tick_time); //find difference
}
} rtl_restore_interrupts(irqstate); // reenable interrupts
} // End DANGER
}
}
} if (delay > max_delay) //is this the biggest delay yet?
} {
} // reset delay max
} max_delay = delay; //record new maximum delay
}
} // reset time of max, >>20 is ~equal to /1e6
} delay_time = (long)((tock_time - zero_time)>>20);
}
} printk( "Delay of %7ldns near %7ldms\n", max_delay, delay_time);
} }
}
} pthread_wait_np( ); //wait for next period
} }
} }
}
}
} // ***** Module Standard Functions ***** ///
}
} int init_module(void)
} {
} pthread_attr_t attr;
} struct sched_param sched_param;
} hrtime_t period, soon;
}
} // initialize pthread attributes
} if( pthread_attr_init(&attr) )
} printk( "Cannot initialize pthread attributes\n" );
}
} // modify pthread priority
} sched_param.sched_priority = 1;
} if ( pthread_attr_setschedparam (&attr, &sched_param) )
} printk( "Cannot set pthread priority: 0\n" );
}
} // initialize the main thread
} if( pthread_create (&daq_thread, &attr, daq_code,(void *)1) )
} printk( "Cannot create pthread\n" );
}
} // make the thread run off the CPU clock
} period = HRTICKS_PER_SEC / FREQUENCY;
} soon = clock_gethrtime(CLOCK_REALTIME) + (100 * period);
} if( pthread_make_periodic_np (daq_thread, soon, period) )
} printk( "Cannot make pthread periodic\n" );
}
} return 0;
} }
}
} void cleanup_module(void)
} {
} // destroy periodic thread
} if( pthread_delete_np(daq_thread) )
} printk( "Cannot destroy phread\n" );
} }
}
}
} -- [rtl] ---
} To unsubscribe:
} echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
} echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
} ---
} For more information on Real-Time Linux see:
} http://www.rtlinux.org/rtlinux/
-- [rtl] ---
To unsubscribe:
echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
---
For more information on Real-Time Linux see:
http://www.rtlinux.org/rtlinux/