2009-06-29 3 views
0

я следующий код в Specman:Как я могу создать ссылку на переменную в 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?

ответ

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; 
    }; 
    

    UPDATE: Вы можете найти более подробную информацию по этому вопросу техника в this Team Specman Post.

  2. Оберните время цикла в функции, то вы можете передавать параметры по ссылке (см help pass reference):

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

Надеется, что это помогает!

Daniel

Смежные вопросы