<div dir="ltr"><div dir="ltr">Hi,<div>I did implement this with Rate Monotonic Manager.</div><div>I followed <a href="https://docs.rtems.org/releases/rtems-docs-4.11.3/c-user/rate_monotonic_manager.html#simple-periodic-task">https://docs.rtems.org/releases/rtems-docs-4.11.3/c-user/rate_monotonic_manager.html#simple-periodic-task</a></div><div>(section 11.3.7, Simple Periodic Task)</div><div><br></div><div>This made my tests to pass, but then I wondered if there is any clock drift ...</div><div>What I mean is this: what is the interval between the 16msec HW timer I use fires and the moment my monotonic task (also set to 16 msec) enters ?</div><div>I'm sure it will be an interval of some usecs, but I want it constant. If this interval keeps growing, we have clock drift.</div><div>I made a patch to measure it and .. there is a clock drift of 20usec at every 8 seconds !! this keeps on adding, so it's not acceptable for my application.</div><div><br></div><div>A few questions..</div><div>1. how reliable is RMM ? is there a precision to it ?</div><div>2. any reason why RMM would introduce clock drift ?</div><div>3. any other solution I can use to have a precise, clock-dirft-free periodic task to execute ?<br></div><div>maybe keep a HW ISR and resume my task from there with <span style="color:rgb(0,0,0)">rtems_task_resume (can </span><span style="color:rgb(0,0,0)">rtems_task_resume be used in ISR ?</span><span style="color:rgb(0,0,0)">)</span></div><div><br></div><div>regards,</div><div>Catalin</div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Aug 20, 2019 at 4:27 PM Joel Sherrill <<a href="mailto:joel@rtems.org">joel@rtems.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Tue, Aug 20, 2019 at 7:50 AM Catalin Demergian <<a href="mailto:demergian@gmail.com" target="_blank">demergian@gmail.com</a>> wrote:<br>
><br>
> Hello,<br>
> The context is RTEMS-4.11.3 on STM32H7.<br>
> I have a timer interrupt routine and I'm calling some functions from it.<br>
> I would like to write a RTEMS task (rtems_task_create API) and call those<br>
> functions from that thread instead of calling them from interrupt context.<br>
><br>
> Of course, I have to call them periodically (say at 1 msec or a few msecs).<br>
> Any guidance how can I achieve that ?<br>
<br>
There is rtems_timer_server_fire_after which moves the timer service routine<br>
to a task. You could also create a task and use a period to achieve the same<br>
end effect. Under the hood, the overhead for both should be similar but you<br>
will get statistics by using a period inside a thread of your own construction.<br>
See Rate Monotonic Manager in the Classic API Guide.<br>
<br>
One general issue is ensuring your clock tick quantum is small enough that<br>
the math for your period works out evenly. But if the clock tick quantum is to<br>
small, then it can introduce excessive overhead.<br>
<br>
><br>
> I was thinking about registering a callback that the OS should call for me a few msecs<br>
> later, but isn't that the same thing ? I guess the OS finds when the time elapsed with<br>
> the help of the HW and calls my callback from an ISR .. am I right ?<br>
> Or if I call some wait functions in my loop and sleep for a few msesc, can I be sure<br>
> that it sleeps 3 mesc instead of a little more based on other existing tasks ?<br>
> So, how can I do this with a good precision?<br>
<br>
Sleep/delay/wake_after will eventually skew. You want a high priority task<br>
using a rate monotonic period. And a clock tick quantum which is an even<br>
divisor for that. Hopefully the clock tick quantum is a divisor for all the<br>
periods in your application.<br>
<br>
--joel<br>
<br>
><br>
> regards,<br>
> Catalin<br>
><br>
> _______________________________________________<br>
> users mailing list<br>
> <a href="mailto:users@rtems.org" target="_blank">users@rtems.org</a><br>
> <a href="http://lists.rtems.org/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/users</a><br>
</blockquote></div></div>