0

我在specman中有以下代码:

var x := some.very.long.path.to.a.variable.in.another.struct;

while (x == some_value) {
    //do something that uses x;
    //wait for something

    //get a new value for x
    x = some.very.long.path.to.a.variable.in.another.struct;
};

x现在,将作业写两次似乎很浪费;初始化期间一次,循环期间一次。

我真正想要使用的是对长变量名的引用,这样我就可以这样做:

var x := reference to some.very.long.path.to.a.variable.in.another.struct;

while (x == some_value) {
    //do something that uses x;
    //wait for something
    //no need to update x now since it's a reference
};

这可以在specman中完成吗?

4

1 回答 1

1

specman/e 通常使用结构和列表的引用,因此如果您的变量类型是其中任何一个,您的第二个示例应该可以工作。对于integer或者boolean我不知道使用变量引用的方法。无论如何,有两个想法可能会对您有所帮助:

  1. 添加指向另一个结构的指针并将其绑定到配置文件中:

    struct a { other_variable : uint; };
    struct b {
        other_struct : a;
        some_func() is {
            var x : uint = other_struct.other_variable;
            while (x == some_value) {
                x = other_struct.other_variable;
            };
        };
    };
    extend cfg {
        struct_a : a;
        struct_b : b;
        keep struct_b.other_struct == struct_a;
    };
    

    更新:您可以在此 Team Specman Post中找到有关此技术的更多信息。

  2. 将您的 while 循环包装在一个函数中,在那里您可以通过引用传递参数(请参阅 参考资料help pass reference):

        some_func(x : *uint) is {
            while (x == some_value) {
                // stuff ...
            };
        };
    

希望这可以帮助!

丹尼尔

于 2009-06-30T07:45:11.697 回答