This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/TMS320C6655:动态 SWI 优先级变化和占先

Guru**** 2551110 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/606718/rtos-tms320c6655-dynamic-swi-priority-changes-and-preemption

器件型号:TMS320C6655

工具/软件:TI-RTOS

我将首先概述我的系统、然后介绍我尝试修复的错误

我有一个每秒重复一次的状态机。 在状态机内、它经过5个数据处理阶段(空闲、获取数据、窗口化、FFT、处理)。 在一个状态结束时、会发布一个 SWI_SELF、在下一次调用时、状态机将进入下一个阶段。 当阶段在一秒启动前完成时、状态机处于空闲状态。 此状态机在优先级为5的 SWI 中运行。 通常、会运行各种消息 SWI (优先级3)以将有关处理状态的信息发送到更高级别的软件。 有两个 Swi (优先级4)负责异步函数执行(例如:调试命令)-一个用于设置参数、另一个用于获取参数。

我的错误是、优先级5 SWI 中的状态更改与调度程序让优先级4设置 SWI 运行之间存在一小段时间(由于 post_self)。 问题在于、通过这样做、我允许数据在测量/计算数据时发生变化。 (不是在处理过程中更改此数据的好主意!)。 我一直在尝试寻找一种方法来"弥补"状态机状态变化中的时间缺口、但尚未成功。 优先级为3的 SWI 消息传送需要比设置/获得的优先级低(优先级为4)。

我尝试了优先级、但这没有成功。 我已尝试在间隙中运行优先级为4的 SWI 循环、因此设置的 SWI 没有机会运行、但这会影响需要发送的通知(优先级为3)。 我一直无法考虑使用 SWI_DISABLE 的可行方法、因为我的状态机依靠自身来更改状态。 一些 RTOS 文档认为 SWI 具有动态可变的优先级(SPRUEX3Q 的第51页)、但我没有找到任何其他证据来支持这一点。 如果我可以在除空闲状态外的任何状态下将设置的优先级降低到2,则*可以*工作。

是否有人会就如何解决这一问题提出任何建议?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Amanda、

    我已将其转发给 c66x RTOS 团队。 他们的反馈应发布在此处。

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您将此内容转交给 RTOS 团队。 他们是否有任何更新?