完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
一直在用的电机任务,初始化的时候我会开启一个10ms的软件定时器来不停地向电机任务里发送状态查询。因为用的TMC的电机芯片,所以程序中还加了个电机到位的上报,由外部中断触发,中断回调里面也会向电机任务发送事件告知运动完成。
因为板卡有六路电机,每一路单独控制的时候没有什么问题。但是多路运行特别是多路复位的时候有的电机会卡死,查询电机状态显示运行中,通过DEBUG发现每一路的电机复位指令下发到了TMC的芯片,但是在到位上报的信息中少了卡死电机的上报。所以有的电机的到位中断并没有成功写入任务。 一开始是每个电机都开启了一个定时器查询,后续改成一个定时器查六个电机并将定时器的周期加到50ms,就很少会卡死。 所以向FreeRTOS的任务中发送事件队列是有什么限制吗,导致这种情况的出现? |
|
相关推荐
1个回答
|
|
|
针对FreeRTOS中向任务发送事件队列时出现的电机卡死问题,确实存在一些关键限制和最佳实践。结合您的现象分析,问题核心可能在于队列深度不足、中断事件丢失、队列发送阻塞时间过长以及多路并发时的处理效率。以下是关键点分析和解决方案建议: 关键限制与问题根源
针对性解决方案✅ 1. 增加队列深度(关键措施!)
✅ 2. 中断服务中严格使用 |
| 问题根源 | 症状表现 | 解决方案 | 优先级 |
|---|---|---|---|
| 队列深度不足 | 多路复位时事件丢失 | 增加队列深度至20-30 | ⭐⭐⭐⭐ |
| 中断API使用错误 | 随机不稳定卡死 | 强制使用xQueueSendFromISR() | ⭐⭐⭐⭐ |
| 发送阻塞时间过长 | 复位时响应延迟 | 发送事件零阻塞/短超时 | ⭐⭐⭐ |
| 10ms定时器冲击队列 | 查询期间中断丢失 | 错峰轮询/动态开关定时器 | ⭐⭐ |
| 任务处理能力不足 | 多路事件积压 | 优化任务逻辑,拆分职责 | ⭐⭐ |
强烈推荐行动顺序:
FromISR API → 验证无崩溃 xQueueSend()操作取消阻塞等待(改为0超时+错误计数) 通过以上优化,可显著缓解FreeRTOS队列压力,确保中断事件不丢失。多路电机系统对实时性敏感,建议在复杂场景下设置队列深度安全余量(如按理论峰值2倍设计),并配合实时监控日志定位瓶颈。
只有小组成员才能发言,加入小组>>
stm32mp157的异核通信的rpmsg_sdb的m4固件和a7驱动该如何编写?
1447 浏览 0 评论
stm32f103用freertos对一个采样率为1kHz的传感器,进行采样,数据出差
1494 浏览 0 评论
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
3641 浏览 1 评论
3834 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
2454 浏览 1 评论
STM32H7打开DCache后,出现了串口接收信息为空的现象,是哪里出了问题?
727浏览 5评论
用NANO STM32F103RBT6的开发板烧录不了是哪里出了问题?
658浏览 5评论
710浏览 5评论
外部中断触发类型为双边沿触发,进入中断回调后有什么办法判断该边沿是上升沿还是下降沿?
940浏览 5评论
STM32L071CBT6低温环境下无法正常工作是什么原因引起的?
744浏览 5评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 18:45 , Processed in 0.767649 second(s), Total 78, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1784