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 = >>> RTDM_TIMERMODE_RELATIVE => BAD >> >> 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 Xenomai@xenomai.org https://xenomai.org/mailman/listinfo/xenomai