뚜둔뚜둔✩

판다의 개발일지

기타/SCRIPT

[PRACTICE] 변수 사용

2022. 5. 7. 05:24

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.setVar.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