
一直在用的电机任务,初始化的时候我会开启一个10ms的软件定时器来不停地向电机任务里发送状态查询。因为用的TMC的电机芯片,所以程序中还加了个电机到位的上报,由外部中断触发,中断回调里面也会向电机任务发送事件告知运动完成。 因为板卡有六路电机,每一路单独控制的时候没有什么问题。但是多路运行特别是多路复位的时候有的电机会卡死,查询电机状态显示运行中,通过DEBUG发现每一路的电机复位指令下发到了TMC的芯片,但是在到位上报的信息中少了卡死电机的上报。所以有的电机的到位中断并没有成功写入任务。 一开始是每个电机都开启了一个定时器查询,后续改成一个定时器查六个电机并将定时器的周期加到50ms,就很少会卡死。 所以向FreeRTOS的任务中发送事件队列是有什么限制吗,导致这种情况的出现? |
CAN数据重发
littlefs系统能读写SD卡吗?
STM32F405的ADC功耗参数不理解
STM32F405RGT6 ADC2+TIM4触发+DMA(DMA2_Stream2_CH1)+DMA中断会死机(取消中断后完全正常)
CUBEIDE1.19.0
stm32支持canfd和dma结合使用吗
NUCLEO-F401RE板卡,连接USB,在KEIL下可以找到ST-LINK仿真器,也可以下载代码。在电脑上看不到NODE_F401RE的磁盘,有知道是什么原因?
程序进入HardFault_Handler求解
STM32CUBEIDE
This example describes how to configure the FMC controller to access the SDRAM memory in low power mode
如果中断频率过高,系统可能会花费过多时间处理中断,导致任务无法及时执行。这可能导致任务队列积压,进而导致电机卡死。
建议尽量减少中断或降低中断频率。比方通过减少中断源或增加中断触发周期,可以有效降低中断频率,削减系统负荷。
同时,确保中断处理程序尽量短小精悍。复杂的处理尽量放在任务中进行,而不是在中断中直接处理。
另外,根据实际需求调整任务优先级,确保关键任务能够及时执行。
注意队列的长度和项大小适合你的应用需求。队列长度过短可能导致队列满无法发送新的事件,过长则可能内存浪费。
还有,注意配置合适的系统栈和任务栈,确保系统和任务有足够的堆栈空间,避免堆栈溢出导致异常。