Skip to content

Commit 9da72c2

Browse files
authored
Merge branch 'main' into ARM_CRx_MPU
2 parents 56a51ff + 1189198 commit 9da72c2

File tree

5 files changed

+71
-70
lines changed

5 files changed

+71
-70
lines changed

include/task.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2289,7 +2289,7 @@ char * pcTaskGetName( TaskHandle_t xTaskToQuery ) PRIVILEGED_FUNCTION;
22892289
* \defgroup vTaskList vTaskList
22902290
* \ingroup TaskUtils
22912291
*/
2292-
#define vTaskList( pcWriteBuffer ) vTaskListTasks( pcWriteBuffer, configSTATS_BUFFER_MAX_LENGTH )
2292+
#define vTaskList( pcWriteBuffer ) vTaskListTasks( ( pcWriteBuffer ), configSTATS_BUFFER_MAX_LENGTH )
22932293

22942294
/**
22952295
* task. h
@@ -2412,7 +2412,7 @@ char * pcTaskGetName( TaskHandle_t xTaskToQuery ) PRIVILEGED_FUNCTION;
24122412
* \defgroup vTaskGetRunTimeStats vTaskGetRunTimeStats
24132413
* \ingroup TaskUtils
24142414
*/
2415-
#define vTaskGetRunTimeStats( pcWriteBuffer ) vTaskGetRunTimeStatistics( pcWriteBuffer, configSTATS_BUFFER_MAX_LENGTH )
2415+
#define vTaskGetRunTimeStats( pcWriteBuffer ) vTaskGetRunTimeStatistics( ( pcWriteBuffer ), configSTATS_BUFFER_MAX_LENGTH )
24162416

24172417
/**
24182418
* task. h

portable/Common/mpu_wrappers_v2.c

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -197,46 +197,46 @@
197197
/*
198198
* Wrappers to keep all the casting in one place.
199199
*/
200-
#define MPU_StoreQueueHandleAtIndex( lIndex, xHandle ) MPU_StoreHandleAndDataAtIndex( lIndex, ( OpaqueObjectHandle_t ) xHandle, NULL, KERNEL_OBJECT_TYPE_QUEUE )
201-
#define MPU_GetQueueHandleAtIndex( lIndex ) ( QueueHandle_t ) MPU_GetHandleAtIndex( lIndex, KERNEL_OBJECT_TYPE_QUEUE )
200+
#define MPU_StoreQueueHandleAtIndex( lIndex, xHandle ) MPU_StoreHandleAndDataAtIndex( ( lIndex ), ( OpaqueObjectHandle_t ) ( xHandle ), NULL, KERNEL_OBJECT_TYPE_QUEUE )
201+
#define MPU_GetQueueHandleAtIndex( lIndex ) ( QueueHandle_t ) MPU_GetHandleAtIndex( ( lIndex ), KERNEL_OBJECT_TYPE_QUEUE )
202202

203203
#if ( configUSE_QUEUE_SETS == 1 )
204-
#define MPU_StoreQueueSetHandleAtIndex( lIndex, xHandle ) MPU_StoreHandleAndDataAtIndex( lIndex, ( OpaqueObjectHandle_t ) xHandle, NULL, KERNEL_OBJECT_TYPE_QUEUE )
205-
#define MPU_GetQueueSetHandleAtIndex( lIndex ) ( QueueSetHandle_t ) MPU_GetHandleAtIndex( lIndex, KERNEL_OBJECT_TYPE_QUEUE )
206-
#define MPU_StoreQueueSetMemberHandleAtIndex( lIndex, xHandle ) MPU_StoreHandleAndDataAtIndex( lIndex, ( OpaqueObjectHandle_t ) xHandle, NULL, KERNEL_OBJECT_TYPE_QUEUE )
207-
#define MPU_GetQueueSetMemberHandleAtIndex( lIndex ) ( QueueSetMemberHandle_t ) MPU_GetHandleAtIndex( lIndex, KERNEL_OBJECT_TYPE_QUEUE )
208-
#define MPU_GetIndexForQueueSetMemberHandle( xHandle ) MPU_GetIndexForHandle( ( OpaqueObjectHandle_t ) xHandle, KERNEL_OBJECT_TYPE_QUEUE )
204+
#define MPU_StoreQueueSetHandleAtIndex( lIndex, xHandle ) MPU_StoreHandleAndDataAtIndex( ( lIndex ), ( OpaqueObjectHandle_t ) ( xHandle ), NULL, KERNEL_OBJECT_TYPE_QUEUE )
205+
#define MPU_GetQueueSetHandleAtIndex( lIndex ) ( QueueSetHandle_t ) MPU_GetHandleAtIndex( ( lIndex ), KERNEL_OBJECT_TYPE_QUEUE )
206+
#define MPU_StoreQueueSetMemberHandleAtIndex( lIndex, xHandle ) MPU_StoreHandleAndDataAtIndex( ( lIndex ), ( OpaqueObjectHandle_t ) ( xHandle ), NULL, KERNEL_OBJECT_TYPE_QUEUE )
207+
#define MPU_GetQueueSetMemberHandleAtIndex( lIndex ) ( QueueSetMemberHandle_t ) MPU_GetHandleAtIndex( ( lIndex ), KERNEL_OBJECT_TYPE_QUEUE )
208+
#define MPU_GetIndexForQueueSetMemberHandle( xHandle ) MPU_GetIndexForHandle( ( OpaqueObjectHandle_t ) ( xHandle ), KERNEL_OBJECT_TYPE_QUEUE )
209209
#endif
210210

211211
/*
212212
* Wrappers to keep all the casting in one place for Task APIs.
213213
*/
214-
#define MPU_StoreTaskHandleAtIndex( lIndex, xHandle ) MPU_StoreHandleAndDataAtIndex( lIndex, ( OpaqueObjectHandle_t ) xHandle, NULL, KERNEL_OBJECT_TYPE_TASK )
215-
#define MPU_GetTaskHandleAtIndex( lIndex ) ( TaskHandle_t ) MPU_GetHandleAtIndex( lIndex, KERNEL_OBJECT_TYPE_TASK )
216-
#define MPU_GetIndexForTaskHandle( xHandle ) MPU_GetIndexForHandle( ( OpaqueObjectHandle_t ) xHandle, KERNEL_OBJECT_TYPE_TASK )
214+
#define MPU_StoreTaskHandleAtIndex( lIndex, xHandle ) MPU_StoreHandleAndDataAtIndex( ( lIndex ), ( OpaqueObjectHandle_t ) ( xHandle ), NULL, KERNEL_OBJECT_TYPE_TASK )
215+
#define MPU_GetTaskHandleAtIndex( lIndex ) ( TaskHandle_t ) MPU_GetHandleAtIndex( ( lIndex ), KERNEL_OBJECT_TYPE_TASK )
216+
#define MPU_GetIndexForTaskHandle( xHandle ) MPU_GetIndexForHandle( ( OpaqueObjectHandle_t ) ( xHandle ), KERNEL_OBJECT_TYPE_TASK )
217217

218218
/*
219219
* Wrappers to keep all the casting in one place for Event Group APIs.
220220
*/
221-
#define MPU_StoreEventGroupHandleAtIndex( lIndex, xHandle ) MPU_StoreHandleAndDataAtIndex( lIndex, ( OpaqueObjectHandle_t ) xHandle, NULL, KERNEL_OBJECT_TYPE_EVENT_GROUP )
222-
#define MPU_GetEventGroupHandleAtIndex( lIndex ) ( EventGroupHandle_t ) MPU_GetHandleAtIndex( lIndex, KERNEL_OBJECT_TYPE_EVENT_GROUP )
223-
#define MPU_GetIndexForEventGroupHandle( xHandle ) MPU_GetIndexForHandle( ( OpaqueObjectHandle_t ) xHandle, KERNEL_OBJECT_TYPE_EVENT_GROUP )
221+
#define MPU_StoreEventGroupHandleAtIndex( lIndex, xHandle ) MPU_StoreHandleAndDataAtIndex( ( lIndex ), ( OpaqueObjectHandle_t ) ( xHandle ), NULL, KERNEL_OBJECT_TYPE_EVENT_GROUP )
222+
#define MPU_GetEventGroupHandleAtIndex( lIndex ) ( EventGroupHandle_t ) MPU_GetHandleAtIndex( ( lIndex ), KERNEL_OBJECT_TYPE_EVENT_GROUP )
223+
#define MPU_GetIndexForEventGroupHandle( xHandle ) MPU_GetIndexForHandle( ( OpaqueObjectHandle_t ) ( xHandle ), KERNEL_OBJECT_TYPE_EVENT_GROUP )
224224

225225
/*
226226
* Wrappers to keep all the casting in one place for Stream Buffer APIs.
227227
*/
228-
#define MPU_StoreStreamBufferHandleAtIndex( lIndex, xHandle ) MPU_StoreHandleAndDataAtIndex( lIndex, ( OpaqueObjectHandle_t ) xHandle, NULL, KERNEL_OBJECT_TYPE_STREAM_BUFFER )
229-
#define MPU_GetStreamBufferHandleAtIndex( lIndex ) ( StreamBufferHandle_t ) MPU_GetHandleAtIndex( lIndex, KERNEL_OBJECT_TYPE_STREAM_BUFFER )
230-
#define MPU_GetIndexForStreamBufferHandle( xHandle ) MPU_GetIndexForHandle( ( OpaqueObjectHandle_t ) xHandle, KERNEL_OBJECT_TYPE_STREAM_BUFFER )
228+
#define MPU_StoreStreamBufferHandleAtIndex( lIndex, xHandle ) MPU_StoreHandleAndDataAtIndex( ( lIndex ), ( OpaqueObjectHandle_t ) ( xHandle), NULL, KERNEL_OBJECT_TYPE_STREAM_BUFFER )
229+
#define MPU_GetStreamBufferHandleAtIndex( lIndex ) ( StreamBufferHandle_t ) MPU_GetHandleAtIndex( ( lIndex ), KERNEL_OBJECT_TYPE_STREAM_BUFFER )
230+
#define MPU_GetIndexForStreamBufferHandle( xHandle ) MPU_GetIndexForHandle( ( OpaqueObjectHandle_t ) ( xHandle ), KERNEL_OBJECT_TYPE_STREAM_BUFFER )
231231

232232
#if ( configUSE_TIMERS == 1 )
233233

234234
/*
235235
* Wrappers to keep all the casting in one place for Timer APIs.
236236
*/
237-
#define MPU_StoreTimerHandleAtIndex( lIndex, xHandle, pxApplicationCallback ) MPU_StoreHandleAndDataAtIndex( lIndex, ( OpaqueObjectHandle_t ) xHandle, ( void * ) pxApplicationCallback, KERNEL_OBJECT_TYPE_TIMER )
238-
#define MPU_GetTimerHandleAtIndex( lIndex ) ( TimerHandle_t ) MPU_GetHandleAtIndex( lIndex, KERNEL_OBJECT_TYPE_TIMER )
239-
#define MPU_GetIndexForTimerHandle( xHandle ) MPU_GetIndexForHandle( ( OpaqueObjectHandle_t ) xHandle, KERNEL_OBJECT_TYPE_TIMER )
237+
#define MPU_StoreTimerHandleAtIndex( lIndex, xHandle, pxApplicationCallback ) MPU_StoreHandleAndDataAtIndex( ( lIndex ), ( OpaqueObjectHandle_t ) ( xHandle ), ( void * ) ( pxApplicationCallback ), KERNEL_OBJECT_TYPE_TIMER )
238+
#define MPU_GetTimerHandleAtIndex( lIndex ) ( TimerHandle_t ) MPU_GetHandleAtIndex( ( lIndex ), KERNEL_OBJECT_TYPE_TIMER )
239+
#define MPU_GetIndexForTimerHandle( xHandle ) MPU_GetIndexForHandle( ( OpaqueObjectHandle_t ) ( xHandle ), KERNEL_OBJECT_TYPE_TIMER )
240240

241241
#endif /* #if ( configUSE_TIMERS == 1 ) */
242242

@@ -245,7 +245,7 @@
245245
/**
246246
* @brief Kernel object pool.
247247
*/
248-
PRIVILEGED_DATA static KernelObject_t xKernelObjectPool[ configPROTECTED_KERNEL_OBJECT_POOL_SIZE ] = { NULL };
248+
PRIVILEGED_DATA static KernelObject_t xKernelObjectPool[ configPROTECTED_KERNEL_OBJECT_POOL_SIZE ] = { 0 };
249249
/*-----------------------------------------------------------*/
250250

251251
static int32_t MPU_GetFreeIndexInKernelObjectPool( void ) /* PRIVILEGED_FUNCTION */
@@ -263,13 +263,13 @@
263263
if( xKernelObjectPool[ i ].xInternalObjectHandle == NULL )
264264
{
265265
/* Mark this index as not free. */
266-
xKernelObjectPool[ i ].xInternalObjectHandle = ( OpaqueObjectHandle_t ) ( ~0 );
266+
xKernelObjectPool[ i ].xInternalObjectHandle = ( OpaqueObjectHandle_t ) ( ~0U );
267267
lFreeIndex = i;
268268
break;
269269
}
270270
}
271271
}
272-
xTaskResumeAll();
272+
( void ) xTaskResumeAll();
273273

274274
return lFreeIndex;
275275
}
@@ -2964,7 +2964,7 @@
29642964
QueueHandle_t xInternalQueueHandle = NULL;
29652965
BaseType_t xReturn = pdFAIL;
29662966

2967-
lIndex = ( uint32_t ) xQueue;
2967+
lIndex = ( int32_t ) xQueue;
29682968

29692969
if( IS_EXTERNAL_INDEX_VALID( lIndex ) != pdFALSE )
29702970
{

portable/ThirdParty/GCC/Posix/port.c

Lines changed: 6 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@
7474
/* Scheduler includes. */
7575
#include "FreeRTOS.h"
7676
#include "task.h"
77-
#include "list.h"
7877
#include "timers.h"
7978
#include "utils/wait_for_event.h"
8079
/*-----------------------------------------------------------*/
@@ -88,7 +87,6 @@ typedef struct THREAD
8887
void * pvParams;
8988
BaseType_t xDying;
9089
struct event * ev;
91-
ListItem_t xThreadListItem;
9290
} Thread_t;
9391

9492
/*
@@ -113,7 +111,6 @@ static BaseType_t xSchedulerEnd = pdFALSE;
113111
static pthread_t hTimerTickThread;
114112
static bool xTimerTickThreadShouldRun;
115113
static uint64_t prvStartTimeNs;
116-
static List_t xThreadList;
117114
/*-----------------------------------------------------------*/
118115

119116
static void prvSetupSignalsAndSchedulerPolicy( void );
@@ -197,14 +194,8 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
197194

198195
thread->ev = event_create();
199196

200-
vListInitialiseItem( &thread->xThreadListItem );
201-
listSET_LIST_ITEM_OWNER( &thread->xThreadListItem, thread );
202-
203197
vPortEnterCritical();
204198

205-
/* Add the new thread in xThreadList. */
206-
vListInsertEnd( &xThreadList, &thread->xThreadListItem );
207-
208199
iRet = pthread_create( &thread->pthread, &xThreadAttributes,
209200
prvWaitForStart, thread );
210201

@@ -235,8 +226,6 @@ BaseType_t xPortStartScheduler( void )
235226
{
236227
int iSignal;
237228
sigset_t xSignals;
238-
ListItem_t * pxIterator;
239-
const ListItem_t * pxEndMarker;
240229

241230
hMainThread = pthread_self();
242231
prvPortSetCurrentThreadName("Scheduler");
@@ -263,19 +252,6 @@ BaseType_t xPortStartScheduler( void )
263252
sigwait( &xSignals, &iSignal );
264253
}
265254

266-
/* Cancel all the running thread. */
267-
pxEndMarker = listGET_END_MARKER( &xThreadList );
268-
269-
for( pxIterator = listGET_HEAD_ENTRY( &xThreadList ); pxIterator != pxEndMarker; pxIterator = listGET_NEXT( pxIterator ) )
270-
{
271-
Thread_t * pxThread = ( Thread_t * ) listGET_LIST_ITEM_OWNER( pxIterator );
272-
273-
pthread_cancel( pxThread->pthread );
274-
event_signal( pxThread->ev );
275-
pthread_join( pxThread->pthread, NULL );
276-
event_delete( pxThread->ev );
277-
}
278-
279255
/*
280256
* clear out the variable that is used to end the scheduler, otherwise
281257
* subsequent scheduler restarts will end immediately.
@@ -300,6 +276,8 @@ BaseType_t xPortStartScheduler( void )
300276

301277
void vPortEndScheduler( void )
302278
{
279+
Thread_t * pxCurrentThread;
280+
303281
/* Stop the timer tick thread. */
304282
xTimerTickThreadShouldRun = false;
305283
pthread_join( hTimerTickThread, NULL );
@@ -308,7 +286,10 @@ void vPortEndScheduler( void )
308286
xSchedulerEnd = pdTRUE;
309287
( void ) pthread_kill( hMainThread, SIG_RESUME );
310288

311-
pthread_exit( NULL );
289+
/* Waiting to be deleted here. */
290+
pxCurrentThread = prvGetThreadFromTask( xTaskGetCurrentTaskHandle() );
291+
event_wait( pxCurrentThread->ev );
292+
pthread_testcancel();
312293
}
313294
/*-----------------------------------------------------------*/
314295

@@ -491,11 +472,6 @@ void vPortCancelThread( void * pxTaskToDelete )
491472
{
492473
Thread_t * pxThreadToCancel = prvGetThreadFromTask( pxTaskToDelete );
493474

494-
/* Remove the thread from xThreadList. */
495-
vPortEnterCritical();
496-
uxListRemove( &pxThreadToCancel->xThreadListItem );
497-
vPortExitCritical();
498-
499475
/*
500476
* The thread has already been suspended so it can be safely cancelled.
501477
*/
@@ -600,9 +576,6 @@ static void prvSetupSignalsAndSchedulerPolicy( void )
600576

601577
hMainThread = pthread_self();
602578

603-
/* Setup thread list to record all the task which are not deleted. */
604-
vListInitialise( &xThreadList );
605-
606579
/* Initialise common signal masks. */
607580
sigfillset( &xAllSignals );
608581

queue.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1190,7 +1190,7 @@ BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue,
11901190
* read, instead return a flag to say whether a context switch is required or
11911191
* not (i.e. has a task with a higher priority than us been woken by this
11921192
* post). */
1193-
uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();
1193+
uxSavedInterruptStatus = ( UBaseType_t ) taskENTER_CRITICAL_FROM_ISR();
11941194
{
11951195
if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) )
11961196
{
@@ -1365,7 +1365,7 @@ BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue,
13651365
* link: https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */
13661366
portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
13671367

1368-
uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();
1368+
uxSavedInterruptStatus = ( UBaseType_t ) taskENTER_CRITICAL_FROM_ISR();
13691369
{
13701370
const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting;
13711371

@@ -2055,7 +2055,7 @@ BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue,
20552055
* link: https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */
20562056
portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
20572057

2058-
uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();
2058+
uxSavedInterruptStatus = ( UBaseType_t ) taskENTER_CRITICAL_FROM_ISR();
20592059
{
20602060
const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting;
20612061

@@ -2153,7 +2153,7 @@ BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue,
21532153
* link: https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */
21542154
portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
21552155

2156-
uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();
2156+
uxSavedInterruptStatus = ( UBaseType_t ) taskENTER_CRITICAL_FROM_ISR();
21572157
{
21582158
/* Cannot block in an ISR, so check there is data available. */
21592159
if( pxQueue->uxMessagesWaiting > ( UBaseType_t ) 0 )

tasks.c

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2229,7 +2229,7 @@ static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,
22292229
/* If the task is running (or yielding), we must add it to the
22302230
* termination list so that an idle task can delete it when it is
22312231
* no longer running. */
2232-
if( taskTASK_IS_RUNNING_OR_SCHEDULED_TO_YIELD( pxTCB ) != pdFALSE )
2232+
if( ( xSchedulerRunning != pdFALSE ) && ( taskTASK_IS_RUNNING_OR_SCHEDULED_TO_YIELD( pxTCB ) != pdFALSE ) )
22332233
{
22342234
/* A running task or a task which is scheduled to yield is being
22352235
* deleted. This cannot complete when the task is still running
@@ -2657,7 +2657,7 @@ static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,
26572657
* https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */
26582658
portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
26592659

2660-
uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();
2660+
uxSavedInterruptStatus = ( UBaseType_t ) taskENTER_CRITICAL_FROM_ISR();
26612661
{
26622662
/* If null is passed in here then it is the priority of the calling
26632663
* task that is being queried. */
@@ -2728,7 +2728,7 @@ static void prvInitialiseNewTask( TaskFunction_t pxTaskCode,
27282728
* https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */
27292729
portASSERT_IF_INTERRUPT_PRIORITY_INVALID();
27302730

2731-
uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();
2731+
uxSavedInterruptStatus = ( UBaseType_t ) taskENTER_CRITICAL_FROM_ISR();
27322732
{
27332733
/* If null is passed in here then it is the base priority of the calling
27342734
* task that is being queried. */
@@ -3740,11 +3740,39 @@ void vTaskEndScheduler( void )
37403740
{
37413741
traceENTER_vTaskEndScheduler();
37423742

3743+
#if ( INCLUDE_vTaskDelete == 1 )
3744+
{
3745+
BaseType_t xCoreID;
3746+
3747+
#if ( configUSE_TIMERS == 1 )
3748+
{
3749+
/* Delete the timer task created by the kernel. */
3750+
vTaskDelete( xTimerGetTimerDaemonTaskHandle() );
3751+
}
3752+
#endif /* #if ( configUSE_TIMERS == 1 ) */
3753+
3754+
/* Delete Idle tasks created by the kernel.*/
3755+
for( xCoreID = 0; xCoreID < ( BaseType_t ) configNUMBER_OF_CORES; xCoreID++ )
3756+
{
3757+
vTaskDelete( xIdleTaskHandles[ xCoreID ] );
3758+
}
3759+
3760+
/* Idle task is responsible for reclaiming the resources of the tasks in
3761+
* xTasksWaitingTermination list. Since the idle task is now deleted and
3762+
* no longer going to run, we need to reclaim resources of all the tasks
3763+
* in the xTasksWaitingTermination list. */
3764+
prvCheckTasksWaitingTermination();
3765+
}
3766+
#endif /* #if ( INCLUDE_vTaskDelete == 1 ) */
3767+
37433768
/* Stop the scheduler interrupts and call the portable scheduler end
37443769
* routine so the original ISRs can be restored if necessary. The port
37453770
* layer must ensure interrupts enable bit is left in the correct state. */
37463771
portDISABLE_INTERRUPTS();
37473772
xSchedulerRunning = pdFALSE;
3773+
3774+
/* This function must be called from a task and the application is
3775+
* responsible for deleting that task after the scheduler is stopped. */
37483776
vPortEndScheduler();
37493777

37503778
traceRETURN_vTaskEndScheduler();
@@ -4629,7 +4657,7 @@ BaseType_t xTaskCatchUpTicks( TickType_t xTicksToCatchUp )
46294657
/* This lets the task know it was forcibly removed from the
46304658
* blocked state so it should not re-evaluate its block time and
46314659
* then block again. */
4632-
pxTCB->ucDelayAborted = pdTRUE;
4660+
pxTCB->ucDelayAborted = ( uint8_t ) pdTRUE;
46334661
}
46344662
else
46354663
{
@@ -5570,7 +5598,7 @@ BaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut,
55705598
{
55715599
/* The delay was aborted, which is not the same as a time out,
55725600
* but has the same result. */
5573-
pxCurrentTCB->ucDelayAborted = pdFALSE;
5601+
pxCurrentTCB->ucDelayAborted = ( uint8_t ) pdFALSE;
55745602
xReturn = pdTRUE;
55755603
}
55765604
else
@@ -8036,7 +8064,7 @@ TickType_t uxTaskResetEventItemValue( void )
80368064

80378065
pxTCB = xTaskToNotify;
80388066

8039-
uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();
8067+
uxSavedInterruptStatus = ( UBaseType_t ) taskENTER_CRITICAL_FROM_ISR();
80408068
{
80418069
if( pulPreviousNotificationValue != NULL )
80428070
{
@@ -8195,7 +8223,7 @@ TickType_t uxTaskResetEventItemValue( void )
81958223

81968224
pxTCB = xTaskToNotify;
81978225

8198-
uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();
8226+
uxSavedInterruptStatus = ( UBaseType_t ) taskENTER_CRITICAL_FROM_ISR();
81998227
{
82008228
ucOriginalNotifyState = pxTCB->ucNotifyState[ uxIndexToNotify ];
82018229
pxTCB->ucNotifyState[ uxIndexToNotify ] = taskNOTIFICATION_RECEIVED;
@@ -8469,7 +8497,7 @@ static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,
84698497
/* About to enter a delayed list, so ensure the ucDelayAborted flag is
84708498
* reset to pdFALSE so it can be detected as having been set to pdTRUE
84718499
* when the task leaves the Blocked state. */
8472-
pxCurrentTCB->ucDelayAborted = pdFALSE;
8500+
pxCurrentTCB->ucDelayAborted = ( uint8_t ) pdFALSE;
84738501
}
84748502
#endif
84758503

0 commit comments

Comments
 (0)