This is the mail archive of the
ecos-devel@sources.redhat.com
mailing list for the eCos project.
Re: [ECOS] periodic threads with kapi?
- From: Ryan Boder <icanoop at bitwiser dot org>
- To: Bart Veer <bartv at ecoscentric dot com>
- Cc: ecos-discuss at sources dot redhat dot com, ecos-devel at sources dot redhat dot com
- Date: Mon, 18 Aug 2003 00:05:23 -0400
- Subject: Re: [ECOS] periodic threads with kapi?
- References: <20030817140013.GA27112@bitwiser.org> <20030817184316.89A1EEC758@delenn.bartv.net>
On Sun, Aug 17, 2003 at 07:43:16PM +0100, Bart Veer wrote:
> >>>>> "Ryan" == Ryan Boder <icanoop@bitwiser.org> writes:
>
> Ryan> Is there a clean way to do periodic threads with absolute
> Ryan> timing, as opposed to the relative timing you get with
> Ryan> cyg_thread_delay()?
>
> This should be easy enough using something like:
>
> void
> my_thread_delay_absolute(cyg_tick_count_t abs_time)
> {
> cyg_tick_count_t delay = abs_time - cyg_current_time();
> if (delay > 0) {
> cyg_thread_delay(delay);
> }
> }
>
> There is a possible problem if the current thread gets descheduled
> between the cyg_current_time() and cyg_thread_delay() calls, causing
> the thread to get delayed for longer than intended. You could avoid
> that by e.g. temporarily boosting the current thread's priority.
The problem still exists doing it that way. In fact that would even make it
worse.
The point is that I don't want to read the current time each period in my
thread. That causes drift.
I looked at the source code and I think it will be easy to add a correct
cyg_thread_absolute_delay(cyg_tick_count_t abs_time) to the kernel API. I
will be happy to write up a patch for it if the maintainers would consider
applying it.
--
Ryan Boder
http://www.bitwiser.org/icanoop