
一直在用的电机任务,初始化的时候我会开启一个10ms的软件定时器来不停地向电机任务里发送状态查询。因为用的TMC的电机芯片,所以程序中还加了个电机到位的上报,由外部中断触发,中断回调里面也会向电机任务发送事件告知运动完成。 因为板卡有六路电机,每一路单独控制的时候没有什么问题。但是多路运行特别是多路复位的时候有的电机会卡死,查询电机状态显示运行中,通过DEBUG发现每一路的电机复位指令下发到了TMC的芯片,但是在到位上报的信息中少了卡死电机的上报。所以有的电机的到位中断并没有成功写入任务。 一开始是每个电机都开启了一个定时器查询,后续改成一个定时器查六个电机并将定时器的周期加到50ms,就很少会卡死。 所以向FreeRTOS的任务中发送事件队列是有什么限制吗,导致这种情况的出现? |
STM32F4的IO口5V容忍问题
询问STM32F407两种USB可以实现的功能
TOF传感器(VL53L5),无法得到data ready
在CUBEMX生成的STM32F407VET6的I2S主机接收模式与I2S主机发送模式能正常运行,如何进行动态调整或者如何实现主机全双工?
STM32F407 多机RS485串口通讯+地址位唤醒+DMA空闲线接收,无法进入中断服务程序。
设置RDP等级为2的同时,有什么办法可以确保后续还能够烧录程序
STM32F407VET6 I2S 采用DMA传输问题
有STM32F4倒车雷达响应例程吗?
STM32F429I倒车雷达响应
STM32多通道FFT运算异常
如果中断频率过高,系统可能会花费过多时间处理中断,导致任务无法及时执行。这可能导致任务队列积压,进而导致电机卡死。
建议尽量减少中断或降低中断频率。比方通过减少中断源或增加中断触发周期,可以有效降低中断频率,削减系统负荷。
同时,确保中断处理程序尽量短小精悍。复杂的处理尽量放在任务中进行,而不是在中断中直接处理。
另外,根据实际需求调整任务优先级,确保关键任务能够及时执行。
注意队列的长度和项大小适合你的应用需求。队列长度过短可能导致队列满无法发送新的事件,过长则可能内存浪费。
还有,注意配置合适的系统栈和任务栈,确保系统和任务有足够的堆栈空间,避免堆栈溢出导致异常。