我在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中完成吗?
答案 0 :(得分:1)
specman / e通常使用结构和列表的引用,所以如果您的变量类型是其中任何一个,那么您的第二个示例应该可行。对于integer
或boolean
,我不知道如何使用变量的引用。无论如何,有两个可能对你有帮助的想法:
添加指向其他结构的指针并将其绑定在配置文件中:
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;
};
更新:您可以在this Team Specman Post中找到有关此技术的更多信息。
在一个函数中包装你的while循环,你可以通过引用传递参数(参见help pass reference
):
some_func(x : *uint) is {
while (x == some_value) {
// stuff ...
};
};
希望这有帮助!
丹尼尔