Updates to the Cortex-M tickless idle code to reduce clock slippage.

Updates to prevent the vTaskSwitchContext() function being removed from GCC builds when link time optimisation is used.
This commit is contained in:
Richard Barry 2017-03-28 03:13:48 +00:00
parent 7ee26c1b5e
commit 464c2660ad
16 changed files with 686 additions and 505 deletions

View file

@ -101,10 +101,6 @@ debugger. */
#define portTASK_RETURN_ADDRESS prvTaskExitError
#endif
/* Each task maintains its own interrupt status in the critical nesting
variable. */
static UBaseType_t uxCriticalNesting = 0xaaaaaaaa;
/*
* Setup the timer to generate the tick interrupts.
*/
@ -129,6 +125,12 @@ static void prvTaskExitError( void );
/*-----------------------------------------------------------*/
/* Each task maintains its own interrupt status in the critical nesting
variable. */
static UBaseType_t uxCriticalNesting = 0xaaaaaaaa;
/*-----------------------------------------------------------*/
/*
* See header file for description.
*/
@ -220,8 +222,11 @@ BaseType_t xPortStartScheduler( void )
/* Should never get here as the tasks will now be executing! Call the task
exit error function to prevent compiler warnings about a static function
not being called in the case that the application writer overrides this
functionality by defining configTASK_RETURN_ADDRESS. */
functionality by defining configTASK_RETURN_ADDRESS. Call
vTaskSwitchContext() so link time optimisation does not remove the
symbol. */
prvTaskExitError();
vTaskSwitchContext();
/* Should not get here! */
return 0;