|
一直在用的电机任务,初始化的时候我会开启一个10ms的软件定时器来不停地向电机任务里发送状态查询。因为用的TMC的电机芯片,所以程序中还加了个电机到位的上报,由外部中断触发,中断回调里面也会向电机任务发送事件告知运动完成。 因为板卡有六路电机,每一路单独控制的时候没有什么问题。但是多路运行特别是多路复位的时候有的电机会卡死,查询电机状态显示运行中,通过DEBUG发现每一路的电机复位指令下发到了TMC的芯片,但是在到位上报的信息中少了卡死电机的上报。所以有的电机的到位中断并没有成功写入任务。 一开始是每个电机都开启了一个定时器查询,后续改成一个定时器查六个电机并将定时器的周期加到50ms,就很少会卡死。 所以向FreeRTOS的任务中发送事件队列是有什么限制吗,导致这种情况的出现? |
请问我的CubeMX为什么初始界面没有ai选项,进去之后也没有addnetwork?
ST Motor Control Workbench卡在如图界面,生成不了代码
SDIO 标致位 没有变
程序卡死在USB_EPStartXfer这里
SDIO 初始化 死在 __HAL_RCC_SDIO_CLK_ENABLE语句上
我现在使用STM32F446ZET6芯片,外挂了16m的片外SDRAM。想把程序在SDRAM中运行,一直尝试没有成功,希望得到帮助,是否有相关的例子或参考的文档
MotorControl Workbench 6.4.1 生成 FOC 项目代码后运行死机。
STM32F405rgt6 I2S DMA输入会造成卡死,这个芯片有BUG
USBX在F407上创建CDC不能正常使用
STM32F427ZGTx内部RTC秒及亚秒同步问题
微信公众号
手机版
如果中断频率过高,系统可能会花费过多时间处理中断,导致任务无法及时执行。这可能导致任务队列积压,进而导致电机卡死。
建议尽量减少中断或降低中断频率。比方通过减少中断源或增加中断触发周期,可以有效降低中断频率,削减系统负荷。
同时,确保中断处理程序尽量短小精悍。复杂的处理尽量放在任务中进行,而不是在中断中直接处理。
另外,根据实际需求调整任务优先级,确保关键任务能够及时执行。
注意队列的长度和项大小适合你的应用需求。队列长度过短可能导致队列满无法发送新的事件,过长则可能内存浪费。
还有,注意配置合适的系统栈和任务栈,确保系统和任务有足够的堆栈空间,避免堆栈溢出导致异常。