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_name Var.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 |