Add Trace Hook Macros and function that returns the start of the stack. (#659)

* Add Trace Hook Macros and function that returns the start of the stack.

* Remove obsolete functions.

---------

Co-authored-by: kar-rahul-aws <118818625+kar-rahul-aws@users.noreply.github.com>
Co-authored-by: Rahul Kar <karahulx@amazon.com>
Co-authored-by: chinglee-iot <61685396+chinglee-iot@users.noreply.github.com>
This commit is contained in:
Boris van der Meer 2023-09-08 01:20:13 +02:00 committed by GitHub
parent f13ad7789b
commit 2f94b181a2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 36 additions and 2 deletions

View file

@ -653,6 +653,14 @@
#define tracePOST_MOVED_TASK_TO_READY_STATE( pxTCB ) #define tracePOST_MOVED_TASK_TO_READY_STATE( pxTCB )
#endif #endif
#ifndef traceMOVED_TASK_TO_DELAYED_LIST
#define traceMOVED_TASK_TO_DELAYED_LIST()
#endif
#ifndef traceMOVED_TASK_TO_OVERFLOW_DELAYED_LIST
#define traceMOVED_TASK_TO_OVERFLOW_DELAYED_LIST()
#endif
#ifndef traceQUEUE_CREATE #ifndef traceQUEUE_CREATE
#define traceQUEUE_CREATE( pxNewQueue ) #define traceQUEUE_CREATE( pxNewQueue )
#endif #endif
@ -901,6 +909,18 @@
#define traceTASK_NOTIFY_GIVE_FROM_ISR( uxIndexToNotify ) #define traceTASK_NOTIFY_GIVE_FROM_ISR( uxIndexToNotify )
#endif #endif
#ifndef traceISR_EXIT_TO_SCHEDULER
#define traceISR_EXIT_TO_SCHEDULER()
#endif
#ifndef traceISR_EXIT
#define traceISR_EXIT()
#endif
#ifndef traceISR_ENTER
#define traceISR_ENTER()
#endif
#ifndef traceSTREAM_BUFFER_CREATE_FAILED #ifndef traceSTREAM_BUFFER_CREATE_FAILED
#define traceSTREAM_BUFFER_CREATE_FAILED( xIsMessageBuffer ) #define traceSTREAM_BUFFER_CREATE_FAILED( xIsMessageBuffer )
#endif #endif

View file

@ -511,14 +511,21 @@ void xPortSysTickHandler( void )
* save and then restore the interrupt mask value as its value is already * save and then restore the interrupt mask value as its value is already
* known. */ * known. */
portDISABLE_INTERRUPTS(); portDISABLE_INTERRUPTS();
traceISR_ENTER();
{ {
/* Increment the RTOS tick. */ /* Increment the RTOS tick. */
if( xTaskIncrementTick() != pdFALSE ) if( xTaskIncrementTick() != pdFALSE )
{ {
traceISR_EXIT_TO_SCHEDULER();
/* A context switch is required. Context switching is performed in /* A context switch is required. Context switching is performed in
* the PendSV interrupt. Pend the PendSV interrupt. */ * the PendSV interrupt. Pend the PendSV interrupt. */
portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;
} }
else
{
traceISR_EXIT();
}
} }
portENABLE_INTERRUPTS(); portENABLE_INTERRUPTS();
} }

View file

@ -95,8 +95,11 @@ typedef unsigned long UBaseType_t;
#define portNVIC_INT_CTRL_REG ( *( ( volatile uint32_t * ) 0xe000ed04 ) ) #define portNVIC_INT_CTRL_REG ( *( ( volatile uint32_t * ) 0xe000ed04 ) )
#define portNVIC_PENDSVSET_BIT ( 1UL << 28UL ) #define portNVIC_PENDSVSET_BIT ( 1UL << 28UL )
#define portEND_SWITCHING_ISR( xSwitchRequired ) do { if( xSwitchRequired != pdFALSE ) portYIELD( ); } while( 0 ) #define portEND_SWITCHING_ISR( xSwitchRequired ) \
#define portYIELD_FROM_ISR( x ) portEND_SWITCHING_ISR( x ) do { if( xSwitchRequired != pdFALSE ) { traceISR_EXIT_TO_SCHEDULER(); portYIELD(); } \
else { traceISR_EXIT(); } \
} while( 0 )
#define portYIELD_FROM_ISR( x ) portEND_SWITCHING_ISR( x )
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
/* Critical section management. */ /* Critical section management. */

View file

@ -7577,12 +7577,14 @@ static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,
{ {
/* Wake time has overflowed. Place this item in the overflow /* Wake time has overflowed. Place this item in the overflow
* list. */ * list. */
traceMOVED_TASK_TO_OVERFLOW_DELAYED_LIST();
vListInsert( pxOverflowDelayedTaskList, &( pxCurrentTCB->xStateListItem ) ); vListInsert( pxOverflowDelayedTaskList, &( pxCurrentTCB->xStateListItem ) );
} }
else else
{ {
/* The wake time has not overflowed, so the current block list /* The wake time has not overflowed, so the current block list
* is used. */ * is used. */
traceMOVED_TASK_TO_DELAYED_LIST();
vListInsert( pxDelayedTaskList, &( pxCurrentTCB->xStateListItem ) ); vListInsert( pxDelayedTaskList, &( pxCurrentTCB->xStateListItem ) );
/* If the task entering the blocked state was placed at the /* If the task entering the blocked state was placed at the
@ -7611,11 +7613,13 @@ static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,
if( xTimeToWake < xConstTickCount ) if( xTimeToWake < xConstTickCount )
{ {
traceMOVED_TASK_TO_OVERFLOW_DELAYED_LIST();
/* Wake time has overflowed. Place this item in the overflow list. */ /* Wake time has overflowed. Place this item in the overflow list. */
vListInsert( pxOverflowDelayedTaskList, &( pxCurrentTCB->xStateListItem ) ); vListInsert( pxOverflowDelayedTaskList, &( pxCurrentTCB->xStateListItem ) );
} }
else else
{ {
traceMOVED_TASK_TO_DELAYED_LIST();
/* The wake time has not overflowed, so the current block list is used. */ /* The wake time has not overflowed, so the current block list is used. */
vListInsert( pxDelayedTaskList, &( pxCurrentTCB->xStateListItem ) ); vListInsert( pxDelayedTaskList, &( pxCurrentTCB->xStateListItem ) );