Ленивая оценка макроса Лаутербаха - возможно ли это?
В настоящее время я пишу своего рода "скелет" для тестов, которые будут выполняться с использованием сценариев Лаутербаха.
В этом скелете я хочу иметь часть, в которой должны быть выполнены все определения, специфичные для теста, например, функции для установки разрывов, переменные, которые должны быть изменены, и т. Д. Эта часть должна быть в верхней части файла сценария, чтобы другие пользователи могли это сделать. не нужно проходить через весь файл скрипта, меняя значения тут и там.
Некоторые из переменных, которые будут использоваться, определены локально в C-коде для тестирования. Таким образом, они становятся доступными для скрипта Lauterbach только после того, как область действия этой функции введена, что находится глубоко в коде скелетного скрипта.
Есть ли способ определить макрос для этих переменных непосредственно перед вводом области?
Давайте приведем пример структуры:
LOCAL &funcToTest // the function we want to test
LOCAL &varToBeSet // a variable within the function we want to alter
LOCAL &valueToBeSet // the value we want to set &varToBeSet to
... // some more definitions here
&funcToTest=someFunc
&varToBeSet=status
&valueToBeSet=1
... // some test code following here that sets up log files, screen areas
... // start the program to be tested etc.
IF (Register(PC)==ADDRESS.OFFSET(&funcToTest))
(
// OK - we've hit the breakpoint inside the function to test
... // Run to some point where we can set the local variable
Var.Set &varToBeSet=&valueToBeSet
... // Go on with the program and see what happens - this will be logged
)
Проблема в том, что Лаутербах жалуется на линию &varToBeSet=status
с Symbol not found in this context
- что правильно, потому что это локальная переменная.
Просматривая символы через View->Symbols->SymbolsTreeView (или давая команду Symbol.List.Tree
) Я могу найти символ (в данном конкретном случае находится под узлом some_module.some_function.status). Нажав на нее, вы получите информацию в строке состояния статуса TRACE32. \\some_app\some_module\some_func\status
с type (auto STATUS)
, scope local
, location stack
,
Изменение моего сценария для чтения &varToBeSet=\\some_app\some_module\some_func\status
вместо &varToBeSet=status
Однако не сильно помогает. В этом случае Лаутербах жалуется с no access to that symbol
,
Есть ли способ, которым я могу отложить оценку макроса до некоторой точки, где он фактически используется, вместо того, чтобы оценивать его при его определении?
1 ответ
Используйте цитаты:
&varToBeSet="\\some_app\some_module\some_func\status"