跟踪状态参数是什么

本文关键字:是什么 参数 状态 跟踪 | 更新日期: 2023-09-27 17:56:37

我正在重构我的前任创建的软件。该软件可以通过CAN总线进行通信。目前,所有设备都在软件中硬编码,我的工作是使每个设备类型可配置。(保存在序列化类中,可通过模型创建者创建)。使用该软件,可以对设备进行配置、寻址和参数设置。

目前,它会跟踪在 uints paramsRequest 和 paramsUpdate 中设置标记枚举的消息。但这需要用其他东西代替。因为这是不可扩展和可配置的。

示例枚举:

public enum FunctionParameters : uint
{
    None = 0,
    StatusInterval = 1 << 0,
    Delay = 1 << 1,
    Time = 1 << 2,
    .....
}

一条消息通过罐头总线发送,并异步等待回复。

当消息传入时:

_paramsUpdated |= (uint) FunctionParameters.StatusInterval;  

另一个线程等待消息到达,使用它并检查是否收到参数。

while (((uint)_paramsUpdated & (uint)param) == 0)
{
    // Do nothing
    Thread.Sleep(threadSleepTimeMS);
    //Thread.Yield();
}

当这需要太长时间时,它将给出超时异常。这目前按预期工作。

问题是,是否有替代方案不适用于

枚举标志来跟踪这一点,因为新情况有多个灵活的标志。

我没有超时问题,用另一个系统替换枚举标志更像是一个架构问题。

跟踪状态参数是什么

我自己可能有解决方案:

我添加了一个名为 参数标志 的类;这看起来链接了这个:

    public class ParameterFlag
    {
        public ParameterFlag(ParameterType parameterType, bool flag)
        {           
            ParameterType = parameterType;
            Flag = flag;
        }
        public ParameterType ParameterType
        {
            get;
            set;
        }
        public bool Flag
        {
            get;
            set;
        }
    }

_paramsUpdated将变成:

    List<ParameterFlag> _paramsUpdated

当消息传入时:

    ParameterFlag flag =_paramsUpdated.Find(x=> x.ParameterType == ParameterType);
    flag.Flag = true;

另一个线程等到消息到达,使用它并检查是否收到参数:

private void WaitParameterReceived(ParameterType param)
{
    while (!_paramsUpdated.Find(x => x.ParameterType == param).Flag)
    {
       // Do nothing
       Thread.Sleep(threadSleepTimeMS);
       //Thread.Yield();
    }
}

非常感谢您的评论!