MACRO
PRACTICE script에서는 macro를 변수(variable)로 사용한다.
macro는 &로 시작하며 영문자(a-z, A-Z)와 숫자(0-9), 언더스코어(_)로만 구성된다.
또, & 바로 다음으로는 숫자를 사용할 수 없으며, 대소문자가 구분된다.
script 내 변수의 scope은 1) PRIVATE, 2) LOCAL, 3) GLOBAL 명령어로 지정된다.
PRIVATE
macro가 선언된 script / 서브루틴 / 블록 이내에서만 유효하며, script / 서브루틴 / 블록이 끝나면 제거된다.
macro가 선언된 블록 내 중첩된 블록에서는 유효하지만, 다른 호출된 script 또는 서브루틴에서는 유효하지 않다.
LOCAL
macro가 선언된 script / 서브루틴 / 블록 이내에서만 유효하며, script / 서브루틴 / 블록이 끝나면 제거된다.
PRIVATE macro와 달리 중첩된 블록, 다른 호출된 script와 서브루틴 모두에서 유효하다.
GLOBAL
macro가 모든 script / 서브루틴 / 블록에서 유효하다.
PMACRO.RESet 명령어로 직접 제거하거나, 오로지 모든 script 수행이 종료되어야 제거된다.
Var.NEW - 복잡한 변수의 사용
| format | Var.NEWGLOBAL [<var_type>] \variable_nameVar.NEWLOCAL  [<var_type>] \variable_name | 
Var.NEW 명령어는 명시한 type의 변수(TRACE32-internal variable)를 등록한다.
TRACE32-internal 변수는 macro와 달리 심볼에 접근하듯이 사용할 수 있다. 또, 구조체와 배열의 복잡한 구조의 변수도 사용할 수 있게 한다. 단, 구조체의 경우 심볼에 정의된 type의 구조체만을 사용할 수 있다.
Var.NEWGLOBAL로 생성된 변수는 GLOBAL, Var.NEWLOCAL로 생성된 변수는 LOCAL macro와 동일 scope을 갖는다.
사용 예시
1)
| // create TRACE32-internal variables Var.NEWLOCAL int \var1 Var.NEWLOCAL float \var2 Var.NEWLOCAL char[10][128] \var3 // initialize variables Var.set \val1=0x20 Var.set \var2=382.13 Var.set \var3[5]="Hello world!" // display all variables Var.View %all \val1 \var2 \var3 // print all variables PRINT %Hex "0x" Var.VALUE(\val1) //integer PRINT Var.FVALUE(\var2) //float PRINT Var.STRing(\var3[5]) //string | 
2)
| Var.NEWLOCAL int /cnt Var.set /cnt=0. Var.WHILE \cnt<5.     Var.set flags[\cnt++]=0. | 
3)
| LOCAL &my_symbol ENTRY &my_symbol Var.NEWLOCAL char[5][40] \typeresult Var.Assign \typeresult[0]="Symbol does not exist" Var.Assign \typeresult[1]="Symbol is label" Var.Assign \typeresult[2]="Symbol is function" Var.Assign \typeresult[3]="Symbol is variable" Var.Assign \typeresult[4]="Undefined" &n=sYmbol.TYPE(&my_symbol) Var.PRINT %String \typeresult[&n] ENDDO | 
Var.set vs. Var.Assign
Var.set와 Var.Assign은 모두 어떤 변수에의 값을 설정하는데 사용한다.
하지만 Var.set으로 설정하게 되면 그에 대한 결과 메세지가 AREA 영역에 출력되지만, Var.Assign을 사용하면 별도의 메세지가 출력되지 않는 것이 다르다.
Var.set의 사용 방법
1) 직접 값 설정
| Var.set \cnt=0. | 
2) 다중 값 설정
| Var.set flags[3..7]=0           // flags[3]=0;flags[4]=0;flags[5]=0;flags[6]=0;flags[7]=0;  Var.set flags[3..7]=(0,1,2,3,4) // flags[3]=0;flags[4]=1;flags[5]=2;flags[6]=3;flags[7]=4; | 
| Var.IF flags[3..7]==(0,1,2,3,4)     PRINT "array elements initialized" ELSE     flags[3..7]=(0,1,2,3,4) ENDDO | 
3) simple C expression
| Var.set \cnt++ | 
4) 함수 수행
| Var.set func(1, 2) | 
'기타 > SCRIPT' 카테고리의 다른 글
| [PRACTICE] STRing Functions (0) | 2022.06.19 | 
|---|---|
| [PRACTICE] 흐름 제어 (Flow Control) (0) | 2022.05.09 | 
| [PRACTICE] Basics (0) | 2022.05.06 | 
| [PRACTICE] 조건문과 반복문 (0) | 2022.05.06 | 
| VSCode에서 cmm script 작성하기 (0) | 2022.05.04 |