Martin ARM7 – LPC2478 – v7.0.2
xQueueHandle xQueue;
void stack_error( void * pvParameters ) // priority normal
{
uint32_t stack[40];
for (int i = 0; i < 50; ++i)
{
stack[i] = i;
}
while (1)
{
vTaskDelay(1);
}
}
void detect_stack_error( void * pvParameters ) // priority highest
{
xQueue = xQueueCreate(10, sizeof(unsigned char));
unsigned char a;
while (1)
{
xQueueReceive(xQueue, &a, portMAX_DELAY);
__asm ("NOPn");
}
}
void vApplicationStackOverflowHook(void *pxTask, char *pcTaskName)
{
(void)pxTask;
portBASE_TYPE pxHigherPriorityTaskWoken;
unsigned char pvItemToQueue;
xQueueSendFromISR( xQueue, & pvItemToQueue, &pxHigherPriorityTaskWoken );
if(pxHigherPriorityTaskWoken)
portYIELD_FROM_ISR();
}