How to program fine-grained real-time concurrent applications in C or Ada

Joel Sherrill joel at rtems.org
Thu Dec 24 22:05:29 UTC 2020


On Thu, Dec 24, 2020, 2:20 PM Mattia Bottaro <mattiabottaro9 at gmail.com>
wrote:

> Hello Joe Sherrill and thank you for the quick response.
>
> I'm not sure I understand correctly what you said. According to this
> example (<
> https://github.com/RTEMS/rtems-examples/blob/master/classic_api/triple_period/tasks.c#L70>),
> "'ticks' is don't care ( = does not work);". What should I infer from
> this comment?
> I've also checked *rtems_task_wake_after*, but it is not what I'm
> looking for: I need something semantically similar to Ada's *delay until,
> *so *not *a *delay. *That's why neither *clock_nanospleep *is suitable
> for my purposes.
>

Look at the Rate Monotonic Manager in the Classic API for a nice API for
periodic activities.

The clock_nanosleep method has an argument for absolute or relative time.
Combine that with using CLOCK_REALTIME or CLOCK_MONOTONIC for delays until
wall times or a relative time in the future.


> Il giorno gio 24 dic 2020 alle ore 18:31 Joel Sherrill <joel at rtems.org>
> ha scritto:
>
>> You missed all the directives that use ticks in the Classic API. There is
>> rtems_task_wake_after for one. Almost every service that had a delay or
>> timeout is in ticks. The length of a tick is configurable in microseconds.
>>
>> POSIX has different services and specifies time intervals and delays
>> differently. See clock_nanosleep for an example where you can even pick the
>> clock source.
>>
>> --joel
>>
>> On Thu, Dec 24, 2020, 5:13 AM Karel Gardas <karel.gardas at centrum.cz>
>> wrote:
>>
>>>
>>> I'd try to use POSIX API and POSIX timers. Look into testsuites/psx*
>>> tests.
>>>
>>> Cheers,
>>> Karel
>>>
>>> On 12/24/20 11:24 AM, Mattia Bottaro wrote:
>>> > Hi everyone, newbie RTEMS here.
>>> >
>>> > I need to develop a multitasking real-time application with RTEMS
>>> > (preferably in Ada, but also C solutions are welcomed). I see that I
>>> can
>>> > use the Classic API
>>> > <https://docs.rtems.org/branches/master/c-user/index.html>, but they
>>> are
>>> > unsuitable to my purposes. As you can read here
>>> > <
>>> https://docs.rtems.org/branches/master/c-user/task/directives.html#task-wake-when-wake-up-when-specified
>>> >,
>>> > the  rtems_task_wake_when directive is too coarse: "The timing
>>> > granularity of this directive is a second.".
>>> > I need to work with microseconds-granularity and I cannot find how to
>>> do it.
>>> >
>>> > Thanks in advance.
>>> >
>>> > _______________________________________________
>>> > users mailing list
>>> > users at rtems.org
>>> > http://lists.rtems.org/mailman/listinfo/users
>>> >
>>>
>>> _______________________________________________
>>> users mailing list
>>> users at rtems.org
>>> http://lists.rtems.org/mailman/listinfo/users
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20201224/b54e443f/attachment-0001.html>


More information about the users mailing list