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参与管理

posted @ 2022-09-16 11:40  realiot  阅读(3552)  评论(0)    收藏  举报