|
57 | 57 |
|
58 | 58 | /* Only the current stack state is to be checked. */
|
59 | 59 | #define taskCHECK_FOR_STACK_OVERFLOW() \
|
60 |
| - do { \ |
| 60 | + do \ |
| 61 | + { \ |
| 62 | + StackType_t * pxCurrentTopOfStack; \ |
| 63 | + portGET_CURRENT_TOP_OF_STACK( pxCurrentTopOfStack ); \ |
| 64 | + \ |
61 | 65 | /* Is the currently saved stack pointer within the stack limit? */ \
|
62 |
| - if( pxCurrentTCB->pxTopOfStack <= pxCurrentTCB->pxStack + portSTACK_LIMIT_PADDING ) \ |
| 66 | + if( pxCurrentTopOfStack <= pxCurrentTCB->pxStack + portSTACK_LIMIT_PADDING ) \ |
63 | 67 | { \
|
64 | 68 | char * pcOverflowTaskName = pxCurrentTCB->pcTaskName; \
|
65 | 69 | vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pcOverflowTaskName ); \
|
|
72 | 76 | #if ( ( configCHECK_FOR_STACK_OVERFLOW == 1 ) && ( portSTACK_GROWTH > 0 ) )
|
73 | 77 |
|
74 | 78 | /* Only the current stack state is to be checked. */
|
75 |
| - #define taskCHECK_FOR_STACK_OVERFLOW() \ |
76 |
| - do { \ |
77 |
| - \ |
78 |
| - /* Is the currently saved stack pointer within the stack limit? */ \ |
79 |
| - if( pxCurrentTCB->pxTopOfStack >= pxCurrentTCB->pxEndOfStack - portSTACK_LIMIT_PADDING ) \ |
80 |
| - { \ |
81 |
| - char * pcOverflowTaskName = pxCurrentTCB->pcTaskName; \ |
82 |
| - vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pcOverflowTaskName ); \ |
83 |
| - } \ |
| 79 | + #define taskCHECK_FOR_STACK_OVERFLOW() \ |
| 80 | + do \ |
| 81 | + { \ |
| 82 | + StackType_t * pxCurrentTopOfStack; \ |
| 83 | + portGET_CURRENT_TOP_OF_STACK( pxCurrentTopOfStack ); \ |
| 84 | + \ |
| 85 | + /* Is the currently saved stack pointer within the stack limit? */ \ |
| 86 | + if( pxCurrentTopOfStack >= pxCurrentTCB->pxEndOfStack - portSTACK_LIMIT_PADDING ) \ |
| 87 | + { \ |
| 88 | + char * pcOverflowTaskName = pxCurrentTCB->pcTaskName; \ |
| 89 | + vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pcOverflowTaskName ); \ |
| 90 | + } \ |
84 | 91 | } while( 0 )
|
85 | 92 |
|
86 | 93 | #endif /* configCHECK_FOR_STACK_OVERFLOW == 1 */
|
87 | 94 | /*-----------------------------------------------------------*/
|
88 | 95 |
|
89 | 96 | #if ( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) && ( portSTACK_GROWTH < 0 ) )
|
90 | 97 |
|
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 |
| - } \ |
| 98 | + #define taskCHECK_FOR_STACK_OVERFLOW() \ |
| 99 | + do \ |
| 100 | + { \ |
| 101 | + const uint32_t * const pulStack = ( uint32_t * ) pxCurrentTCB->pxStack; \ |
| 102 | + const uint32_t ulCheckValue = ( uint32_t ) 0xa5a5a5a5U; \ |
| 103 | + StackType_t * pxCurrentTopOfStack; \ |
| 104 | + portGET_CURRENT_TOP_OF_STACK( pxCurrentTopOfStack ); \ |
| 105 | + \ |
| 106 | + if( ( pxCurrentTopOfStack <= pxCurrentTCB->pxStack + portSTACK_LIMIT_PADDING ) || \ |
| 107 | + ( pulStack[ 0 ] != ulCheckValue ) || \ |
| 108 | + ( pulStack[ 1 ] != ulCheckValue ) || \ |
| 109 | + ( pulStack[ 2 ] != ulCheckValue ) || \ |
| 110 | + ( pulStack[ 3 ] != ulCheckValue ) ) \ |
| 111 | + { \ |
| 112 | + char * pcOverflowTaskName = pxCurrentTCB->pcTaskName; \ |
| 113 | + vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pcOverflowTaskName ); \ |
| 114 | + } \ |
105 | 115 | } while( 0 )
|
106 | 116 |
|
107 | 117 | #endif /* #if( configCHECK_FOR_STACK_OVERFLOW > 1 ) */
|
|
110 | 120 | #if ( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) && ( portSTACK_GROWTH > 0 ) )
|
111 | 121 |
|
112 | 122 | #define taskCHECK_FOR_STACK_OVERFLOW() \
|
113 |
| - do { \ |
| 123 | + do \ |
| 124 | + { \ |
114 | 125 | int8_t * pcEndOfStack = ( int8_t * ) pxCurrentTCB->pxEndOfStack; \
|
115 | 126 | static const uint8_t ucExpectedStackBytes[] = { tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
|
116 | 127 | tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
|
117 | 128 | tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
|
118 | 129 | tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
|
119 | 130 | tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE }; \
|
120 |
| - \ |
| 131 | + StackType_t * pxCurrentTopOfStack; \ |
| 132 | + portGET_CURRENT_TOP_OF_STACK( pxCurrentTopOfStack ); \ |
121 | 133 | \
|
122 | 134 | pcEndOfStack -= sizeof( ucExpectedStackBytes ); \
|
123 | 135 | \
|
124 |
| - if( ( pxCurrentTCB->pxTopOfStack >= pxCurrentTCB->pxEndOfStack - portSTACK_LIMIT_PADDING ) || \ |
| 136 | + if( ( pxCurrentTopOfStack >= pxCurrentTCB->pxEndOfStack - portSTACK_LIMIT_PADDING ) || \ |
125 | 137 | ( memcmp( ( void * ) pcEndOfStack, ( void * ) ucExpectedStackBytes, sizeof( ucExpectedStackBytes ) ) != 0 ) ) \
|
126 | 138 | { \
|
127 | 139 | char * pcOverflowTaskName = pxCurrentTCB->pcTaskName; \
|
|
0 commit comments