From 942a1f67321ebe152dae7cd927add7879df0f714 Mon Sep 17 00:00:00 2001 From: "Jose F. Martinez Pedraza" Date: Mon, 1 Aug 2022 17:21:36 -0400 Subject: [PATCH 1/2] Fix #1244, Add RTEMS timebase callback wrapper --- src/os/rtems/src/os-impl-timebase.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/os/rtems/src/os-impl-timebase.c b/src/os/rtems/src/os-impl-timebase.c index f9a5b4a2f..a903e330d 100644 --- a/src/os/rtems/src/os-impl-timebase.c +++ b/src/os/rtems/src/os-impl-timebase.c @@ -286,6 +286,24 @@ void OS_UsecsToTicks(uint32 usecs, rtems_interval *ticks) /* The user may specify whether to use priority inheritance on mutexes via osconfig.h */ #define OSAL_TIMEBASE_MUTEX_ATTRIBS RTEMS_PRIORITY | RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY +/*---------------------------------------------------------------- + * + * Function: OS_TimeBase_CallbackThreadEntry + * + * Purpose: Local helper routine, not part of OSAL API. + * Wrapper function used by OS_TimeBaseCreate_Impl to + * convert the rtems_task_argument on newly created + * timebase task into an osal_id_t used by the + * OS_TimeBase_CallbackThread. + * + *-----------------------------------------------------------------*/ +static void OS_TimeBase_CallbackThreadEntry(rtems_task_argument arg) +{ + osal_id_t id; + id = OS_ObjectIdFromInteger(arg); + OS_TimeBase_CallbackThread(id); +} + /*---------------------------------------------------------------- * * Function: OS_TimeBaseCreate_Impl @@ -390,9 +408,9 @@ int32 OS_TimeBaseCreate_Impl(const OS_object_token_t *token) else { /* will place the task in 'ready for scheduling' state */ - rtems_sc = rtems_task_start(local->handler_task, /*rtems task id*/ - (rtems_task_entry)OS_TimeBase_CallbackThread, /* task entry point */ - (rtems_task_argument)r_name); /* passed argument */ + rtems_sc = rtems_task_start(local->handler_task, /*rtems task id*/ + (rtems_task_entry)OS_TimeBase_CallbackThreadEntry, /* task entry point */ + (rtems_task_argument)r_name); /* passed argument */ if (rtems_sc != RTEMS_SUCCESSFUL) { From 97441c8acad5354cb2d59a8431bb95f18194bda0 Mon Sep 17 00:00:00 2001 From: "Jose F. Martinez Pedraza" Date: Thu, 4 Aug 2022 14:04:41 -0400 Subject: [PATCH 2/2] Fix #1244, removed cast that hid the bug at compile time --- src/os/rtems/src/os-impl-timebase.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/os/rtems/src/os-impl-timebase.c b/src/os/rtems/src/os-impl-timebase.c index a903e330d..3d9c4afd8 100644 --- a/src/os/rtems/src/os-impl-timebase.c +++ b/src/os/rtems/src/os-impl-timebase.c @@ -408,9 +408,9 @@ int32 OS_TimeBaseCreate_Impl(const OS_object_token_t *token) else { /* will place the task in 'ready for scheduling' state */ - rtems_sc = rtems_task_start(local->handler_task, /*rtems task id*/ - (rtems_task_entry)OS_TimeBase_CallbackThreadEntry, /* task entry point */ - (rtems_task_argument)r_name); /* passed argument */ + rtems_sc = rtems_task_start(local->handler_task, /* rtems task id */ + OS_TimeBase_CallbackThreadEntry, /* task entry point */ + (rtems_task_argument)r_name); /* passed argument */ if (rtems_sc != RTEMS_SUCCESSFUL) {