mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-06-07 04:49:04 -04:00
Updates to prevent warnings when compiled with LLVM.
This commit is contained in:
parent
8ca40d80a9
commit
0a7a0a79d6
|
@ -154,6 +154,8 @@ StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t px
|
||||||
|
|
||||||
static void prvTaskExitError( void )
|
static void prvTaskExitError( void )
|
||||||
{
|
{
|
||||||
|
volatile uint32_t ulDummy = 0UL;
|
||||||
|
|
||||||
/* A function that implements a task must not exit or attempt to return to
|
/* A function that implements a task must not exit or attempt to return to
|
||||||
its caller as there is nothing to return to. If a task wants to exit it
|
its caller as there is nothing to return to. If a task wants to exit it
|
||||||
should instead call vTaskDelete( NULL ).
|
should instead call vTaskDelete( NULL ).
|
||||||
|
@ -162,7 +164,16 @@ static void prvTaskExitError( void )
|
||||||
defined, then stop here so application writers can catch the error. */
|
defined, then stop here so application writers can catch the error. */
|
||||||
configASSERT( uxCriticalNesting == ~0UL );
|
configASSERT( uxCriticalNesting == ~0UL );
|
||||||
portDISABLE_INTERRUPTS();
|
portDISABLE_INTERRUPTS();
|
||||||
for( ;; );
|
while( ulDummy == 0 )
|
||||||
|
{
|
||||||
|
/* This file calls prvTaskExitError() after the scheduler has been
|
||||||
|
started to remove a compiler warning about the function being defined
|
||||||
|
but never called. ulDummy is used purely to quieten other warnings
|
||||||
|
about code appearing after this function is called - making ulDummy
|
||||||
|
volatile makes the compiler think the function could return and
|
||||||
|
therefore not output an 'unreachable code' warning for code that appears
|
||||||
|
after it. */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -179,10 +190,11 @@ void vPortStartFirstTask( void )
|
||||||
table offset register that can be used to locate the initial stack value.
|
table offset register that can be used to locate the initial stack value.
|
||||||
Not all M0 parts have the application vector table at address 0. */
|
Not all M0 parts have the application vector table at address 0. */
|
||||||
__asm volatile(
|
__asm volatile(
|
||||||
|
" .syntax unified \n"
|
||||||
" ldr r2, pxCurrentTCBConst2 \n" /* Obtain location of pxCurrentTCB. */
|
" ldr r2, pxCurrentTCBConst2 \n" /* Obtain location of pxCurrentTCB. */
|
||||||
" ldr r3, [r2] \n"
|
" ldr r3, [r2] \n"
|
||||||
" ldr r0, [r3] \n" /* The first item in pxCurrentTCB is the task top of stack. */
|
" ldr r0, [r3] \n" /* The first item in pxCurrentTCB is the task top of stack. */
|
||||||
" add r0, #32 \n" /* Discard everything up to r0. */
|
" adds r0, #32 \n" /* Discard everything up to r0. */
|
||||||
" msr psp, r0 \n" /* This is now the new top of stack to use in the task. */
|
" msr psp, r0 \n" /* This is now the new top of stack to use in the task. */
|
||||||
" movs r0, #2 \n" /* Switch to the psp stack. */
|
" movs r0, #2 \n" /* Switch to the psp stack. */
|
||||||
" msr CONTROL, r0 \n"
|
" msr CONTROL, r0 \n"
|
||||||
|
@ -225,8 +237,8 @@ BaseType_t xPortStartScheduler( void )
|
||||||
functionality by defining configTASK_RETURN_ADDRESS. Call
|
functionality by defining configTASK_RETURN_ADDRESS. Call
|
||||||
vTaskSwitchContext() so link time optimisation does not remove the
|
vTaskSwitchContext() so link time optimisation does not remove the
|
||||||
symbol. */
|
symbol. */
|
||||||
prvTaskExitError();
|
|
||||||
vTaskSwitchContext();
|
vTaskSwitchContext();
|
||||||
|
prvTaskExitError();
|
||||||
|
|
||||||
/* Should not get here! */
|
/* Should not get here! */
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -282,12 +294,16 @@ uint32_t ulSetInterruptMaskFromISR( void )
|
||||||
::: "memory"
|
::: "memory"
|
||||||
);
|
);
|
||||||
|
|
||||||
/* To avoid compiler warnings. This line will never be reached. */
|
#if !defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
|
||||||
|
/* To avoid compiler warnings. The return statement will nevere be reached,
|
||||||
|
but some compilers warn if it is not included, while others won't compile if
|
||||||
|
it is. */
|
||||||
return 0;
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
void vClearInterruptMaskFromISR( uint32_t ulMask )
|
void vClearInterruptMaskFromISR( __attribute__( ( unused ) ) uint32_t ulMask )
|
||||||
{
|
{
|
||||||
__asm volatile(
|
__asm volatile(
|
||||||
" msr PRIMASK, r0 \n"
|
" msr PRIMASK, r0 \n"
|
||||||
|
@ -295,8 +311,12 @@ void vClearInterruptMaskFromISR( uint32_t ulMask )
|
||||||
::: "memory"
|
::: "memory"
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Just to avoid compiler warning. */
|
#if !defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
|
||||||
|
/* Just to avoid compiler warning. ulMask is used from the asm code but
|
||||||
|
the compiler can't see that. Some compilers generate warnings without the
|
||||||
|
following line, while others generate warnings if the line is included. */
|
||||||
( void ) ulMask;
|
( void ) ulMask;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -306,12 +326,13 @@ void xPortPendSVHandler( void )
|
||||||
|
|
||||||
__asm volatile
|
__asm volatile
|
||||||
(
|
(
|
||||||
|
" .syntax unified \n"
|
||||||
" mrs r0, psp \n"
|
" mrs r0, psp \n"
|
||||||
" \n"
|
" \n"
|
||||||
" ldr r3, pxCurrentTCBConst \n" /* Get the location of the current TCB. */
|
" ldr r3, pxCurrentTCBConst \n" /* Get the location of the current TCB. */
|
||||||
" ldr r2, [r3] \n"
|
" ldr r2, [r3] \n"
|
||||||
" \n"
|
" \n"
|
||||||
" sub r0, r0, #32 \n" /* Make space for the remaining low registers. */
|
" subs r0, r0, #32 \n" /* Make space for the remaining low registers. */
|
||||||
" str r0, [r2] \n" /* Save the new top of stack. */
|
" str r0, [r2] \n" /* Save the new top of stack. */
|
||||||
" stmia r0!, {r4-r7} \n" /* Store the low registers that are not saved automatically. */
|
" stmia r0!, {r4-r7} \n" /* Store the low registers that are not saved automatically. */
|
||||||
" mov r4, r8 \n" /* Store the high registers. */
|
" mov r4, r8 \n" /* Store the high registers. */
|
||||||
|
@ -328,7 +349,7 @@ void xPortPendSVHandler( void )
|
||||||
" \n"
|
" \n"
|
||||||
" ldr r1, [r2] \n"
|
" ldr r1, [r2] \n"
|
||||||
" ldr r0, [r1] \n" /* The first item in pxCurrentTCB is the task top of stack. */
|
" ldr r0, [r1] \n" /* The first item in pxCurrentTCB is the task top of stack. */
|
||||||
" add r0, r0, #16 \n" /* Move to the high registers. */
|
" adds r0, r0, #16 \n" /* Move to the high registers. */
|
||||||
" ldmia r0!, {r4-r7} \n" /* Pop the high registers. */
|
" ldmia r0!, {r4-r7} \n" /* Pop the high registers. */
|
||||||
" mov r8, r4 \n"
|
" mov r8, r4 \n"
|
||||||
" mov r9, r5 \n"
|
" mov r9, r5 \n"
|
||||||
|
@ -337,7 +358,7 @@ void xPortPendSVHandler( void )
|
||||||
" \n"
|
" \n"
|
||||||
" msr psp, r0 \n" /* Remember the new top of stack for the task. */
|
" msr psp, r0 \n" /* Remember the new top of stack for the task. */
|
||||||
" \n"
|
" \n"
|
||||||
" sub r0, r0, #32 \n" /* Go back for the low registers that are not automatically restored. */
|
" subs r0, r0, #32 \n" /* Go back for the low registers that are not automatically restored. */
|
||||||
" ldmia r0!, {r4-r7} \n" /* Pop low registers. */
|
" ldmia r0!, {r4-r7} \n" /* Pop low registers. */
|
||||||
" \n"
|
" \n"
|
||||||
" bx r3 \n"
|
" bx r3 \n"
|
||||||
|
|
|
@ -233,6 +233,8 @@ StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t px
|
||||||
|
|
||||||
static void prvTaskExitError( void )
|
static void prvTaskExitError( void )
|
||||||
{
|
{
|
||||||
|
volatile uint32_t ulDummy = 0UL;
|
||||||
|
|
||||||
/* A function that implements a task must not exit or attempt to return to
|
/* A function that implements a task must not exit or attempt to return to
|
||||||
its caller as there is nothing to return to. If a task wants to exit it
|
its caller as there is nothing to return to. If a task wants to exit it
|
||||||
should instead call vTaskDelete( NULL ).
|
should instead call vTaskDelete( NULL ).
|
||||||
|
@ -241,7 +243,16 @@ static void prvTaskExitError( void )
|
||||||
defined, then stop here so application writers can catch the error. */
|
defined, then stop here so application writers can catch the error. */
|
||||||
configASSERT( uxCriticalNesting == ~0UL );
|
configASSERT( uxCriticalNesting == ~0UL );
|
||||||
portDISABLE_INTERRUPTS();
|
portDISABLE_INTERRUPTS();
|
||||||
for( ;; );
|
while( ulDummy == 0 )
|
||||||
|
{
|
||||||
|
/* This file calls prvTaskExitError() after the scheduler has been
|
||||||
|
started to remove a compiler warning about the function being defined
|
||||||
|
but never called. ulDummy is used purely to quieten other warnings
|
||||||
|
about code appearing after this function is called - making ulDummy
|
||||||
|
volatile makes the compiler think the function could return and
|
||||||
|
therefore not output an 'unreachable code' warning for code that appears
|
||||||
|
after it. */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -373,8 +384,8 @@ BaseType_t xPortStartScheduler( void )
|
||||||
functionality by defining configTASK_RETURN_ADDRESS. Call
|
functionality by defining configTASK_RETURN_ADDRESS. Call
|
||||||
vTaskSwitchContext() so link time optimisation does not remove the
|
vTaskSwitchContext() so link time optimisation does not remove the
|
||||||
symbol. */
|
symbol. */
|
||||||
prvTaskExitError();
|
|
||||||
vTaskSwitchContext();
|
vTaskSwitchContext();
|
||||||
|
prvTaskExitError();
|
||||||
|
|
||||||
/* Should not get here! */
|
/* Should not get here! */
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -258,6 +258,8 @@ StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t px
|
||||||
|
|
||||||
static void prvTaskExitError( void )
|
static void prvTaskExitError( void )
|
||||||
{
|
{
|
||||||
|
volatile uint32_t ulDummy = 0;
|
||||||
|
|
||||||
/* A function that implements a task must not exit or attempt to return to
|
/* A function that implements a task must not exit or attempt to return to
|
||||||
its caller as there is nothing to return to. If a task wants to exit it
|
its caller as there is nothing to return to. If a task wants to exit it
|
||||||
should instead call vTaskDelete( NULL ).
|
should instead call vTaskDelete( NULL ).
|
||||||
|
@ -266,7 +268,16 @@ static void prvTaskExitError( void )
|
||||||
defined, then stop here so application writers can catch the error. */
|
defined, then stop here so application writers can catch the error. */
|
||||||
configASSERT( uxCriticalNesting == ~0UL );
|
configASSERT( uxCriticalNesting == ~0UL );
|
||||||
portDISABLE_INTERRUPTS();
|
portDISABLE_INTERRUPTS();
|
||||||
for( ;; );
|
while( ulDummy == 0 )
|
||||||
|
{
|
||||||
|
/* This file calls prvTaskExitError() after the scheduler has been
|
||||||
|
started to remove a compiler warning about the function being defined
|
||||||
|
but never called. ulDummy is used purely to quieten other warnings
|
||||||
|
about code appearing after this function is called - making ulDummy
|
||||||
|
volatile makes the compiler think the function could return and
|
||||||
|
therefore not output an 'unreachable code' warning for code that appears
|
||||||
|
after it. */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -415,8 +426,8 @@ BaseType_t xPortStartScheduler( void )
|
||||||
functionality by defining configTASK_RETURN_ADDRESS. Call
|
functionality by defining configTASK_RETURN_ADDRESS. Call
|
||||||
vTaskSwitchContext() so link time optimisation does not remove the
|
vTaskSwitchContext() so link time optimisation does not remove the
|
||||||
symbol. */
|
symbol. */
|
||||||
prvTaskExitError();
|
|
||||||
vTaskSwitchContext();
|
vTaskSwitchContext();
|
||||||
|
prvTaskExitError();
|
||||||
|
|
||||||
/* Should not get here! */
|
/* Should not get here! */
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -252,6 +252,8 @@ StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t px
|
||||||
|
|
||||||
static void prvTaskExitError( void )
|
static void prvTaskExitError( void )
|
||||||
{
|
{
|
||||||
|
volatile uint32_t ulDummy = 0;
|
||||||
|
|
||||||
/* A function that implements a task must not exit or attempt to return to
|
/* A function that implements a task must not exit or attempt to return to
|
||||||
its caller as there is nothing to return to. If a task wants to exit it
|
its caller as there is nothing to return to. If a task wants to exit it
|
||||||
should instead call vTaskDelete( NULL ).
|
should instead call vTaskDelete( NULL ).
|
||||||
|
@ -260,7 +262,16 @@ static void prvTaskExitError( void )
|
||||||
defined, then stop here so application writers can catch the error. */
|
defined, then stop here so application writers can catch the error. */
|
||||||
configASSERT( uxCriticalNesting == ~0UL );
|
configASSERT( uxCriticalNesting == ~0UL );
|
||||||
portDISABLE_INTERRUPTS();
|
portDISABLE_INTERRUPTS();
|
||||||
for( ;; );
|
while( ulDummy == 0 )
|
||||||
|
{
|
||||||
|
/* This file calls prvTaskExitError() after the scheduler has been
|
||||||
|
started to remove a compiler warning about the function being defined
|
||||||
|
but never called. ulDummy is used purely to quieten other warnings
|
||||||
|
about code appearing after this function is called - making ulDummy
|
||||||
|
volatile makes the compiler think the function could return and
|
||||||
|
therefore not output an 'unreachable code' warning for code that appears
|
||||||
|
after it. */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -403,8 +414,8 @@ BaseType_t xPortStartScheduler( void )
|
||||||
functionality by defining configTASK_RETURN_ADDRESS. Call
|
functionality by defining configTASK_RETURN_ADDRESS. Call
|
||||||
vTaskSwitchContext() so link time optimisation does not remove the
|
vTaskSwitchContext() so link time optimisation does not remove the
|
||||||
symbol. */
|
symbol. */
|
||||||
prvTaskExitError();
|
|
||||||
vTaskSwitchContext();
|
vTaskSwitchContext();
|
||||||
|
prvTaskExitError();
|
||||||
|
|
||||||
/* Should not get here! */
|
/* Should not get here! */
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in a new issue