
一直在用的电机任务,初始化的时候我会开启一个10ms的软件定时器来不停地向电机任务里发送状态查询。因为用的TMC的电机芯片,所以程序中还加了个电机到位的上报,由外部中断触发,中断回调里面也会向电机任务发送事件告知运动完成。 因为板卡有六路电机,每一路单独控制的时候没有什么问题。但是多路运行特别是多路复位的时候有的电机会卡死,查询电机状态显示运行中,通过DEBUG发现每一路的电机复位指令下发到了TMC的芯片,但是在到位上报的信息中少了卡死电机的上报。所以有的电机的到位中断并没有成功写入任务。 一开始是每个电机都开启了一个定时器查询,后续改成一个定时器查六个电机并将定时器的周期加到50ms,就很少会卡死。 所以向FreeRTOS的任务中发送事件队列是有什么限制吗,导致这种情况的出现? |
stm32f407无法配置定时器2为全部dma
使用stm32F407连接PHY芯片进行以太网通讯,一插网线就会进入错误中断。
ST的IMU和地磁计用motionfx库融合后航向角异常的问题
CUEBIDE生成的APP程序,在写入FLASH之后无法正常跳转。
有关Cubeide IAP 问题
stm32驱动st7735屏幕区分地图上的障碍物.
stm32cubumx使用1.28.0固件包无法初始化fsmc
STM32 touch 4.24.2 生成代码,但是keil编译不通过问题 求助
stm32cubeIDE使用malloc失败
请教为什么中断回调函数中不能使用接收中断开启函数
如果中断频率过高,系统可能会花费过多时间处理中断,导致任务无法及时执行。这可能导致任务队列积压,进而导致电机卡死。
建议尽量减少中断或降低中断频率。比方通过减少中断源或增加中断触发周期,可以有效降低中断频率,削减系统负荷。
同时,确保中断处理程序尽量短小精悍。复杂的处理尽量放在任务中进行,而不是在中断中直接处理。
另外,根据实际需求调整任务优先级,确保关键任务能够及时执行。
注意队列的长度和项大小适合你的应用需求。队列长度过短可能导致队列满无法发送新的事件,过长则可能内存浪费。
还有,注意配置合适的系统栈和任务栈,确保系统和任务有足够的堆栈空间,避免堆栈溢出导致异常。