On Sep 28, 2021, at 5:02 AM, Sebastian Huber 
<sebastian.hu...@embedded-brains.de<mailto:sebastian.hu...@embedded-brains.de>> 
wrote:

On 28/09/2021 11:46, Heinz Junkes wrote:
Unfortunately we found out that EPICS uses the mutex handling also in the 
interrupt context
and this leads to core-dumps in RTEMS :-(

Yes, using any kind of mutexes in interrupt context is undefined behaviour. 
Mutexes may only be used from threads.

Heinz' reply about our osdMutex may be irrelevant. I suspect the issue is what 
if any changes we’d need to make to our implementation of the epicsEvent found 
here
https://github.com/epics-base/epics-base/blob/7.0/modules/libcom/src/osi/os/RTEMS-score/osdEvent.c
for a modified version of this to work on an RTEMS-5 or later SMP system. It 
creates a semaphore as follows:

sc = rtems_semaphore_create (rtems_build_name ('B', c3, c2, c1),
    initialState,
    RTEMS_FIFO | RTEMS_SIMPLE_BINARY_SEMAPHORE |
        RTEMS_NO_INHERIT_PRIORITY | RTEMS_NO_PRIORITY_CEILING | RTEMS_LOCAL,
    0,
    &sid);

We will want to use the same code on both SMP and UP systems and from earlier 
posts it sounds like they would need different flags. Does RTEMS define a macro 
that tells us which we’re compiling for, or will we have to add our own?

Which RTEMS semaphore classes do you use in EPICS and in particular which 
classes do you use in interrupt context?

An epicsEvent must be able to be triggered from interrupt context, and in the 
above implementation epicsEventTrigger() calls rtems_semaphore_release(). 
That’s the only routine we need AFAIK.

- Andrew

--
Complexity comes for free, simplicity you have to work for.

_______________________________________________
users mailing list
users@rtems.org
http://lists.rtems.org/mailman/listinfo/users

Reply via email to