뚜둔뚜둔✩

판다의 개발일지

기타/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