Lowell Gilbert <klu...@be-well.ilk.org> writes:

> Lowell Gilbert <klu...@be-well.ilk.org> writes:
>> Philippe Gerum <r...@xenomai.org> writes:
>>> On 02/09/2018 11:02 AM, Philippe Gerum wrote:
>>>> On 02/09/2018 12:45 AM, Lowell Gilbert wrote:
>>>>> Am I correct in assuming that when calling rtdm_timer_start(), I should
>>>>> not be getting multi-second latencies before the first call to the timer
>>>>> routine? Just checking before I dig in too far.
>>>> Of course not. I suspect an absolute expiry time is given with a
>>>> relative mode spec.
>>> More generally, an absolute expiry time which is not based on the right
>>> clock specified by the mode argument.
>>> i.e.
>>> expiry = rtdm_clock_monotonic(), mode = RTDM_TIMERMODE_REALTIME => BAD
>>> expiry = rtdm_clock_realtime(), mode = RTDM_TIMERMODE_ABSOLUTE => BAD
>>> expiry = rtdm_clock_realtime() or _monotonic(), mode =
>> Okay, that makes sense.
>> I was using 0 for expiry, because I really just wanted the periodic
>> wakeup. I don't remember why I didn't create a periodic task instead of
>> using a timer.
>> What clock do I want to use to get the timer started? Once it starts, it
>> runs fine; but it often takes two or three seconds before the first call
>> into the handler.
>> To put it another way, I'm trying to figure out what am I doing wrong in:
>>              ret = rtdm_timer_start(&pstate.collect.timer, 1,
>>                                     pstate.collect.period,
>>                                     RTDM_TIMERMODE_RELATIVE);
> I could just rewrite the code to use a periodic task, but I'd prefer to
> understand what is actually wrong with my current code first, to be sure
> that refactoring will really solve my problem.
> Or I could have the timer run constantly, but that is just hacking
> around the problem, not really solving it.

I have a feature request that would require me to run the data collection
constantly (or at least whenever there's a consumer ready to receive it),
so that will ameliorate the problems for me. However, I'd prefer to
understand what's happening, because as far as I understand at the moment,
what I am doing *should* work.

Also, as a matter of design, is there any reason to prefer a periodic task
over a timer or vice versa? It can potentially cycle at fairly high rates
(a period as low as 10 microseconds), although expected use cases will not.

Be well.

Xenomai mailing list

Reply via email to