freertos的临界区中断问题。
在使用ch395q网络协议芯片与电机结合,ch395发送函数必须保持不被打断,为了不被打断只能在其他任务增加临界区,临界区回有禁用中断的功能,电机的步数是在定时器中断中进行计数,所有在网口发送的状态会影响电机的步数,所以在
电机移动的过程中使用网口查询电机步数或者状态会应会影响电机的实际步数。
为了解决这个问题:要了解一个问题taskENTER_CRITICAL() 在 FreeRTOS 中不会禁用所有中断,它只禁用优先级低于 configMAX_SYSCALL_INTERRUPT_PRIORITY 的中断。
在freertos中有着这个
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 6
这个意思就是禁用>6的中断,1~5的中断不会禁用
所以要把电机的定时器中断的优先级高于6设置成5在发送的时候就不会影响电机步数的查询
说一句taskENTER_CRITICAL() 这个是支持嵌套的
浙公网安备 33010602011771号