FREERTOS 中断调用 xQueueSendFromISR错误解决
需求概述:
将CAN总线中断处理函数收到的数据使用消息队列转发,以为使用标志位方式处理数据接收速度慢,容易遗漏,所以要使用中断方式。
问题现象:
CAN总线中断优先级为0,在CAN总线中断处理函数中调用xQueueSendFromISR转发数据后,程序假死。
原因分析:
在配置文件FreertosConfig中,
configLIBRARY_LOWEST_INTERRUPT_PRIORITY是0x0F 即15;
configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY是0x01.
也就是说,FREERTOS只能管理优先级是1-15的中断
如果用户想要在CAN总线中使用xQueueSendFromISR处理CAN总线数据,则需要允许FREERTOS参与管理,就需要调整中断的优先级在1-15这个区间之内。

解决方法:
调整CAN总线CAN1 CAN2的中断优先级为1 ,即允许FREERTOS参与管理