Skip to content

Commit

Permalink
refactor: change methods ENTER|EXIT critical
Browse files Browse the repository at this point in the history
The read and write from BaseType_t, can be do in a atomic context, and
dont need a mutex contol.
Change this methods for access the critical regiao only if is
neccessary. For make this, create a macro in portable.h that apoint to
tasENTER|EXIT_CRITIAL() function. Now, if port is guarantee that access
BaseType_t in atomic context, a empty macro can be define in
portmacro.h, like this:

Signed-off-by: guilherme giacomo simoes <trintaeoitogc@gmail.com>
  • Loading branch information
GuilhermeGiacomoSimoes committed Oct 2, 2024
1 parent 1cb8042 commit a118f6a
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 14 deletions.
8 changes: 8 additions & 0 deletions include/portable.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,14 @@
#define portARCH_NAME NULL
#endif

#ifndef portBASE_TYPE_ENTER_CRITICAL
#define portBASE_TYPE_ENTER_CRITICAL() taskENTER_CRITICAL()
#endif

#ifndef portBASE_TYPE_EXIT_CRITICAL
#define portBASE_TYPE_EXIT_CRITICAL() taskEXIT_CRITICAL()
#endif

#ifndef configSTACK_DEPTH_TYPE
#define configSTACK_DEPTH_TYPE StackType_t
#endif
Expand Down
8 changes: 4 additions & 4 deletions queue.c
Original file line number Diff line number Diff line change
Expand Up @@ -2202,11 +2202,11 @@ UBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue )

configASSERT( xQueue );

taskENTER_CRITICAL();
portBASE_TYPE_ENTER_CRITICAL();
{
uxReturn = ( ( Queue_t * ) xQueue )->uxMessagesWaiting;
}
taskEXIT_CRITICAL();
portBASE_TYPE_EXIT_CRITICAL();

traceRETURN_uxQueueMessagesWaiting( uxReturn );

Expand All @@ -2223,11 +2223,11 @@ UBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue )

configASSERT( pxQueue );

taskENTER_CRITICAL();
portBASE_TYPE_ENTER_CRITICAL();
{
uxReturn = ( UBaseType_t ) ( pxQueue->uxLength - pxQueue->uxMessagesWaiting );
}
taskEXIT_CRITICAL();
portBASE_TYPE_EXIT_CRITICAL();

traceRETURN_uxQueueSpacesAvailable( uxReturn );

Expand Down
12 changes: 6 additions & 6 deletions tasks.c
Original file line number Diff line number Diff line change
Expand Up @@ -2623,14 +2623,14 @@ static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,

traceENTER_uxTaskPriorityGet( xTask );

taskENTER_CRITICAL();
portBASE_TYPE_ENTER_CRITICAL();
{
/* If null is passed in here then it is the priority of the task
* that called uxTaskPriorityGet() that is being queried. */
pxTCB = prvGetTCBFromHandle( xTask );
uxReturn = pxTCB->uxPriority;
}
taskEXIT_CRITICAL();
portBASE_TYPE_EXIT_CRITICAL();

traceRETURN_uxTaskPriorityGet( uxReturn );

Expand Down Expand Up @@ -2697,14 +2697,14 @@ static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,

traceENTER_uxTaskBasePriorityGet( xTask );

taskENTER_CRITICAL();
portBASE_TYPE_ENTER_CRITICAL();
{
/* If null is passed in here then it is the base priority of the task
* that called uxTaskBasePriorityGet() that is being queried. */
pxTCB = prvGetTCBFromHandle( xTask );
uxReturn = pxTCB->uxBasePriority;
}
taskEXIT_CRITICAL();
portBASE_TYPE_EXIT_CRITICAL();

traceRETURN_uxTaskBasePriorityGet( uxReturn );

Expand Down Expand Up @@ -3040,12 +3040,12 @@ static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,

traceENTER_vTaskCoreAffinityGet( xTask );

taskENTER_CRITICAL();
portBASE_TYPE_ENTER_CRITICAL();
{
pxTCB = prvGetTCBFromHandle( xTask );
uxCoreAffinityMask = pxTCB->uxCoreAffinityMask;
}
taskEXIT_CRITICAL();
portBASE_TYPE_EXIT_CRITICAL();

traceRETURN_vTaskCoreAffinityGet( uxCoreAffinityMask );

Expand Down
8 changes: 4 additions & 4 deletions timers.c
Original file line number Diff line number Diff line change
Expand Up @@ -601,7 +601,7 @@
traceENTER_xTimerGetReloadMode( xTimer );

configASSERT( xTimer );
taskENTER_CRITICAL();
portBASE_TYPE_ENTER_CRITICAL();
{
if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) == 0U )
{
Expand All @@ -614,7 +614,7 @@
xReturn = pdTRUE;
}
}
taskEXIT_CRITICAL();
portBASE_TYPE_EXIT_CRITICAL();

traceRETURN_xTimerGetReloadMode( xReturn );

Expand Down Expand Up @@ -1169,7 +1169,7 @@
configASSERT( xTimer );

/* Is the timer in the list of active timers? */
taskENTER_CRITICAL();
portBASE_TYPE_ENTER_CRITICAL();
{
if( ( pxTimer->ucStatus & tmrSTATUS_IS_ACTIVE ) == 0U )
{
Expand All @@ -1180,7 +1180,7 @@
xReturn = pdTRUE;
}
}
taskEXIT_CRITICAL();
portBASE_TYPE_EXIT_CRITICAL();

traceRETURN_xTimerIsTimerActive( xReturn );

Expand Down

0 comments on commit a118f6a

Please sign in to comment.