你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

FreeRTOS问题求解

[复制链接]
猪小屁 提问时间:2025-4-25 09:37 / 未解决
一直在用的电机任务,初始化的时候我会开启一个10ms的软件定时器来不停地向电机任务里发送状态查询。因为用的TMC的电机芯片,所以程序中还加了个电机到位的上报,由外部中断触发,中断回调里面也会向电机任务发送事件告知运动完成。


因为板卡有六路电机,每一路单独控制的时候没有什么问题。但是多路运行特别是多路复位的时候有的电机会卡死,查询电机状态显示运行中,通过DEBUG发现每一路的电机复位指令下发到了TMC的芯片,但是在到位上报的信息中少了卡死电机的上报。所以有的电机的到位中断并没有成功写入任务。

一开始是每个电机都开启了一个定时器查询,后续改成一个定时器查六个电机并将定时器的周期加到50ms,就很少会卡死。
所以向FreeRTOS的任务中发送事件队列是有什么限制吗,导致这种情况的出现?
收藏 评论1 发布时间:2025-4-25 09:37

举报

1个回答
xmshao 回答时间:3 小时前
从你描述的情况来看,程序卡死跟中断发生的频率强相关。


如果中断频率过高,系统可能会花费过多时间处理中断,导致任务无法及时执行。这可能导致任务队列积压,进而导致电机卡死。


建议尽量减少中断或降低中断频率。比方通过减少中断源或增加中断触发周期,可以有效降低中断频率,削减系统负荷。


同时,确保中断处理程序尽量短小精悍。复杂的处理尽量放在任务中进行,而不是在中断中直接处理。


另外,根据实际需求调整任务优先级,确保关键任务能够及时执行。


注意队列的长度和项大小适合你的应用需求。队列长度过短可能导致队列满无法发送新的事件,过长则可能内存浪费。


还有,注意配置合适的系统栈和任务栈,确保系统和任务有足够的堆栈空间,避免堆栈溢出导致异常。
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版