工具/软件: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,则*可以*工作。
是否有人会就如何解决这一问题提出任何建议?