|
88 | 88 |
|
89 | 89 | #if ( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) && ( portSTACK_GROWTH < 0 ) )
|
90 | 90 |
|
91 |
| - #define taskCHECK_FOR_STACK_OVERFLOW() \ |
92 |
| - do { \ |
93 |
| - const uint32_t * const pulStack = ( uint32_t * ) pxCurrentTCB->pxStack; \ |
94 |
| - const uint32_t ulCheckValue = ( uint32_t ) 0xa5a5a5a5U; \ |
95 |
| - \ |
96 |
| - if( ( pulStack[ 0 ] != ulCheckValue ) || \ |
97 |
| - ( pulStack[ 1 ] != ulCheckValue ) || \ |
98 |
| - ( pulStack[ 2 ] != ulCheckValue ) || \ |
99 |
| - ( pulStack[ 3 ] != ulCheckValue ) ) \ |
100 |
| - { \ |
101 |
| - char * pcOverflowTaskName = pxCurrentTCB->pcTaskName; \ |
102 |
| - vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pcOverflowTaskName ); \ |
103 |
| - } \ |
| 91 | + #define taskCHECK_FOR_STACK_OVERFLOW() \ |
| 92 | + do { \ |
| 93 | + const uint32_t * const pulStack = ( uint32_t * ) pxCurrentTCB->pxStack; \ |
| 94 | + const uint32_t ulCheckValue = ( uint32_t ) 0xa5a5a5a5U; \ |
| 95 | + \ |
| 96 | + if( ( pxCurrentTCB->pxTopOfStack <= pxCurrentTCB->pxStack + portSTACK_LIMIT_PADDING ) || \ |
| 97 | + ( pulStack[ 0 ] != ulCheckValue ) || \ |
| 98 | + ( pulStack[ 1 ] != ulCheckValue ) || \ |
| 99 | + ( pulStack[ 2 ] != ulCheckValue ) || \ |
| 100 | + ( pulStack[ 3 ] != ulCheckValue ) ) \ |
| 101 | + { \ |
| 102 | + char * pcOverflowTaskName = pxCurrentTCB->pcTaskName; \ |
| 103 | + vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pcOverflowTaskName ); \ |
| 104 | + } \ |
104 | 105 | } while( 0 )
|
105 | 106 |
|
106 | 107 | #endif /* #if( configCHECK_FOR_STACK_OVERFLOW > 1 ) */
|
|
120 | 121 | \
|
121 | 122 | pcEndOfStack -= sizeof( ucExpectedStackBytes ); \
|
122 | 123 | \
|
123 |
| - /* Has the extremity of the task stack ever been written over? */ \ |
124 |
| - if( memcmp( ( void * ) pcEndOfStack, ( void * ) ucExpectedStackBytes, sizeof( ucExpectedStackBytes ) ) != 0 ) \ |
| 124 | + if( ( pxCurrentTCB->pxTopOfStack >= pxCurrentTCB->pxEndOfStack - portSTACK_LIMIT_PADDING ) || \ |
| 125 | + ( memcmp( ( void * ) pcEndOfStack, ( void * ) ucExpectedStackBytes, sizeof( ucExpectedStackBytes ) ) != 0 ) ) \ |
125 | 126 | { \
|
126 | 127 | char * pcOverflowTaskName = pxCurrentTCB->pcTaskName; \
|
127 | 128 | vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pcOverflowTaskName ); \
|
|
0 commit comments