我正在尝试使用FreeRTOS的xSemaphoreGiveFromISR
函数和随附的portEND_SWITCHING_ISR
宏来处理处理I2C事务结束的中断内的信号量。
每次我这样做,我都会在程序的应用程序堆栈溢出挂钩函数中结束。从工作版本中唯一的变化是将此行添加到ISR中,并且我将堆栈的大小从8192
加倍到16384
,但没有帮助。
有没有人想过会弄到什么?
我的configCHECK_FOR_STACK_OVERFLOW
值为1。
答案 0 :(得分:1)
您可能需要检查中断是否以与RTOS configKERNEL_INTERRUPT_PRIORITY相同的优先级运行。
不清楚地说明了这一点。
我遇到了与RTOS默认配置相同的问题,将中断优先级设置为低于芯片的默认值,至少对于Microchip设备而言。
你还需要为每个任务提供足够的内存来处理优先级,如果你有任何taskYield,它必须是中断的最后一条指令。