как я могу создать ссылку на переменную в specman?

StackOverflow https://stackoverflow.com/questions/1058718

  •  21-08-2019
  •  | 
  •  

Вопрос

У меня есть следующий код в 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?

Это было полезно?

Решение

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

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

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

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

Надеюсь, это поможет!

Дэниел

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top