在FreeRTOS中从ISR获取信号量后,堆栈溢出

时间:2012-01-12 01:35:21

标签: stack-overflow semaphore interrupt freertos

我正在尝试使用FreeRTOS的xSemaphoreGiveFromISR函数和随附的portEND_SWITCHING_ISR宏来处理处理I2C事务结束的中断内的信号量。

每次我这样做,我都会在程序的应用程序堆栈溢出挂钩函数中结束。从工作版本中唯一的变化是将此行添加到ISR中,并且我将堆栈的大小从8192加倍到16384,但没有帮助。

有没有人想过会弄到什么?

我的configCHECK_FOR_STACK_OVERFLOW值为1。

1 个答案:

答案 0 :(得分:1)

您可能需要检查中断是否以与RTOS configKERNEL_INTERRUPT_PRIORITY相同的优先级运行。

不清楚地说明了这一点。

我遇到了与RTOS默认配置相同的问题,将中断优先级设置为低于芯片的默认值,至少对于Microchip设备而言。

你还需要为每个任务提供足够的内存来处理优先级,如果你有任何taskYield,它必须是中断的最后一条指令。