"Script Programming"의 두 판 사이의 차이
(같은 사용자에 의한 2개의 중간 편집이 숨겨짐) | |||
1번째 줄: | 1번째 줄: | ||
− | + | <h2>시작하기 전에</h2> | |
− | <h2 | + | |
− | + | ||
<p>본 문서는TRACE32-ICD를 이용한 예제를 중심으로 cmm 파일을 이용하여 고급적인 기능을 사용하기 위한 방법을 대해 알아 보기로 하자. (<sup>*</sup>MDS테크놀로지 제공하는 ARM920T 보드)</p> | <p>본 문서는TRACE32-ICD를 이용한 예제를 중심으로 cmm 파일을 이용하여 고급적인 기능을 사용하기 위한 방법을 대해 알아 보기로 하자. (<sup>*</sup>MDS테크놀로지 제공하는 ARM920T 보드)</p> | ||
<p> </p> | <p> </p> | ||
− | <h2 | + | <h2>CMM 구조</h2> |
− | + | ||
− | + | ||
<p>Point) CMM 파일 작성하는 방법을 익혀보자.</p> | <p>Point) CMM 파일 작성하는 방법을 익혀보자.</p> | ||
− | < | + | <h3>CMM 작성</h3> |
<p>Cmm은 TRACE32내에서 사용하고 있는 스크립트이다. TRACE32내에서 여러 명령어를 하나의 파일로 작성을 해서 인터프리터 방식으로 실행이 된다. 시작은 B::으로 시작되고 ENDDO로 끝을 나타낸다. Cmm 구성 형태를 보면 아래와 같다.</p> | <p>Cmm은 TRACE32내에서 사용하고 있는 스크립트이다. TRACE32내에서 여러 명령어를 하나의 파일로 작성을 해서 인터프리터 방식으로 실행이 된다. 시작은 B::으로 시작되고 ENDDO로 끝을 나타낸다. Cmm 구성 형태를 보면 아래와 같다.</p> | ||
<p><img src="/data/wiki/2015-02-16/1424053730.png" alt="" /></p> | <p><img src="/data/wiki/2015-02-16/1424053730.png" alt="" /></p> | ||
<p> </p> | <p> </p> | ||
− | < | + | <h3>주석문(Comment) </h3> |
<p>Cmm 문장 중 주석문은 [//] 와 [;]로 표현되는데 실행에는 참여하지 않고, 단지 그 스크립트 명령어가 어떤 역할을 하는지 설명해 주는 것으로 스크립트 문장 중 어느 곳에 와도 무방하다.</p> | <p>Cmm 문장 중 주석문은 [//] 와 [;]로 표현되는데 실행에는 참여하지 않고, 단지 그 스크립트 명령어가 어떤 역할을 하는지 설명해 주는 것으로 스크립트 문장 중 어느 곳에 와도 무방하다.</p> | ||
<p><img src="/data/wiki/2015-02-16/1424053852.png" alt="" /></p> | <p><img src="/data/wiki/2015-02-16/1424053852.png" alt="" /></p> | ||
− | < | + | <p> </p> |
− | < | + | <h3>변수(Variable)와 명칭(Name: identifier) </h3> |
<p>cmm에서 변수란 사용자가 부여하는 명칭으로 다음과 같은 규칙이 있다.</p> | <p>cmm에서 변수란 사용자가 부여하는 명칭으로 다음과 같은 규칙이 있다.</p> | ||
<p>- 변수명의 구성은 영문자(A-Z,a-z),숫자(0-9),밑줄(_)로 구성된다.</p> | <p>- 변수명의 구성은 영문자(A-Z,a-z),숫자(0-9),밑줄(_)로 구성된다.</p> | ||
26번째 줄: | 22번째 줄: | ||
<p>- Global 변수는 다른 cmm 파일내에서도 변수를 사용할 수가 있고, local 변수는 현재 cmm 파일내에서만 사용이 가능하다.</p> | <p>- Global 변수는 다른 cmm 파일내에서도 변수를 사용할 수가 있고, local 변수는 현재 cmm 파일내에서만 사용이 가능하다.</p> | ||
<p> </p> | <p> </p> | ||
− | < | + | <h3>선언문</h3> |
<p>선언문이란 구현하고자 하는 스크립트가 어떠한 형태인가에 상관없이 동일하게 변수를 사용한다. 즉, 정수형, 실수형,long형,double형 변수가 따로 구분이 없다.</p> | <p>선언문이란 구현하고자 하는 스크립트가 어떠한 형태인가에 상관없이 동일하게 변수를 사용한다. 즉, 정수형, 실수형,long형,double형 변수가 따로 구분이 없다.</p> | ||
<p> </p> | <p> </p> | ||
35번째 줄: | 31번째 줄: | ||
<p>4) 변환 문자: %d – 10진 정수를 표시,%h – 16진로 표시</p> | <p>4) 변환 문자: %d – 10진 정수를 표시,%h – 16진로 표시</p> | ||
<p> </p> | <p> </p> | ||
− | < | + | <h3>산술연산자</h3> |
<p><img src="/data/wiki/2015-02-16/1424053941.png" alt="" /></p> | <p><img src="/data/wiki/2015-02-16/1424053941.png" alt="" /></p> | ||
<p>Example 1.1</p> | <p>Example 1.1</p> | ||
<p><img src="/data/wiki/2015-02-16/1424062457.png" alt="" /></p> | <p><img src="/data/wiki/2015-02-16/1424062457.png" alt="" /></p> | ||
<p> </p> | <p> </p> | ||
− | < | + | <h3>관계연산자</h3> |
<p><img src="/data/wiki/2015-02-16/1424059946.png" alt="" /></p> | <p><img src="/data/wiki/2015-02-16/1424059946.png" alt="" /></p> | ||
<p> </p> | <p> </p> | ||
− | < | + | <h3>논리연산자</h3> |
<p><img src="/data/wiki/2015-02-16/1424059958.png" alt="" /></p> | <p><img src="/data/wiki/2015-02-16/1424059958.png" alt="" /></p> | ||
<p> </p> | <p> </p> | ||
− | < | + | <h3>비트연산자</h3> |
<p><img src="/data/wiki/2015-02-16/1424059965.png" alt="" /></p> | <p><img src="/data/wiki/2015-02-16/1424059965.png" alt="" /></p> | ||
<p>Example 1.2</p> | <p>Example 1.2</p> | ||
57번째 줄: | 53번째 줄: | ||
<div><img src="/data/wiki/2015-02-16/1424062739.png" alt="" /></div> | <div><img src="/data/wiki/2015-02-16/1424062739.png" alt="" /></div> | ||
<p><img src="/data/wiki/2015-02-16/1424062757.png" alt="" /></p> | <p><img src="/data/wiki/2015-02-16/1424062757.png" alt="" /></p> | ||
− | < | + | <h3>If-else문</h3> |
<p><img src="/data/wiki/2015-02-16/1424062798.png" alt="" /></p> | <p><img src="/data/wiki/2015-02-16/1424062798.png" alt="" /></p> | ||
<p>if문은 조건절의 내용에 따라서 true나 false값을 반환한다. Else 절은 필요시 기술하며 필요 없을 경우에는 생략할 수 있다. If 조건절 이후 한 문장일 경우에는 블록으로 지정하지 않아도 되지만, 한 문장 이상일 경우에는 괄호를 사용하여 블록으로 지정해야 한다.</p> | <p>if문은 조건절의 내용에 따라서 true나 false값을 반환한다. Else 절은 필요시 기술하며 필요 없을 경우에는 생략할 수 있다. If 조건절 이후 한 문장일 경우에는 블록으로 지정하지 않아도 되지만, 한 문장 이상일 경우에는 괄호를 사용하여 블록으로 지정해야 한다.</p> | ||
67번째 줄: | 63번째 줄: | ||
<p> </p> | <p> </p> | ||
<p> </p> | <p> </p> | ||
− | < | + | <h3>While문</h3> |
<p>반복논리를 제공하기 위해 while, repeat 문을 제공하고 있다. 반복문들은 지정된 문장을 조건이 만족할 때까지 반복한다. 조건을 지정하는 방법에 따라 while, repeat문이 구분되어 사용된다.</p> | <p>반복논리를 제공하기 위해 while, repeat 문을 제공하고 있다. 반복문들은 지정된 문장을 조건이 만족할 때까지 반복한다. 조건을 지정하는 방법에 따라 while, repeat문이 구분되어 사용된다.</p> | ||
<p>(example_3_1.cmm)</p> | <p>(example_3_1.cmm)</p> | ||
76번째 줄: | 72번째 줄: | ||
<p><img src="/data/wiki/2015-02-16/1424063000.png" alt="" /></p> | <p><img src="/data/wiki/2015-02-16/1424063000.png" alt="" /></p> | ||
<p> </p> | <p> </p> | ||
− | < | + | <h3>문자 입출력</h3> |
<p>Print 명령어로 출력을 한다.</p> | <p>Print 명령어로 출력을 한다.</p> | ||
<div><img src="/data/wiki/2015-02-16/1424063087.png" alt="" /></div> | <div><img src="/data/wiki/2015-02-16/1424063087.png" alt="" /></div> | ||
89번째 줄: | 85번째 줄: | ||
<div><img src="/data/wiki/2015-02-16/1424063121.png" alt="" /></div> | <div><img src="/data/wiki/2015-02-16/1424063121.png" alt="" /></div> | ||
<p> </p> | <p> </p> | ||
− | < | + | <h3>파일 입출력</h3> |
<p>cmm에서는 다양한 방법으로 입출력을 수가 있다. AREA.OPEN, PRINTER.OPEN, OPEN #1, READ #1, WRITE #1 이 있다.</p> | <p>cmm에서는 다양한 방법으로 입출력을 수가 있다. AREA.OPEN, PRINTER.OPEN, OPEN #1, READ #1, WRITE #1 이 있다.</p> | ||
<p> </p> | <p> </p> | ||
99번째 줄: | 95번째 줄: | ||
<p><img src="/data/wiki/2015-02-16/1424063206.png" alt="" /></p> | <p><img src="/data/wiki/2015-02-16/1424063206.png" alt="" /></p> | ||
<p> </p> | <p> </p> | ||
− | < | + | <h3>이벤트</h3> |
<p>시스템(타겟 & PowerView)의 상태가 변할 때 ON-command은 정의되어 있는 PRACTICE 프로그램으로 자동 분기하도록 한다. ON commands들은 PRACTICE 스택 안에 저장 되므로 정의된 블록 내에서만 동작한다.주의 할 점은 ENDDO 혹은 END을 script마지막 부분에 사용해서는 안된다. 이 경우 정의된 이벤트들이 지워진다.</p> | <p>시스템(타겟 & PowerView)의 상태가 변할 때 ON-command은 정의되어 있는 PRACTICE 프로그램으로 자동 분기하도록 한다. ON commands들은 PRACTICE 스택 안에 저장 되므로 정의된 블록 내에서만 동작한다.주의 할 점은 ENDDO 혹은 END을 script마지막 부분에 사용해서는 안된다. 이 경우 정의된 이벤트들이 지워진다.</p> | ||
<p> </p> | <p> </p> | ||
127번째 줄: | 123번째 줄: | ||
<p><img src="/data/wiki/2015-02-16/1424063255.png" alt="" /></p> | <p><img src="/data/wiki/2015-02-16/1424063255.png" alt="" /></p> | ||
<p> </p> | <p> </p> | ||
− | < | + | <h3>Dialog box</h3> |
<p>Cmm 파일을 이용하여 사용자 GUI환경을 꾸밀 수가 있다.</p> | <p>Cmm 파일을 이용하여 사용자 GUI환경을 꾸밀 수가 있다.</p> | ||
<table border="1" cellspacing="0" cellpadding="0"> | <table border="1" cellspacing="0" cellpadding="0"> |
2015년 10월 16일 (금) 14:01 기준 최신판
시작하기 전에
본 문서는TRACE32-ICD를 이용한 예제를 중심으로 cmm 파일을 이용하여 고급적인 기능을 사용하기 위한 방법을 대해 알아 보기로 하자. (*MDS테크놀로지 제공하는 ARM920T 보드)
CMM 구조
Point) CMM 파일 작성하는 방법을 익혀보자.
CMM 작성
Cmm은 TRACE32내에서 사용하고 있는 스크립트이다. TRACE32내에서 여러 명령어를 하나의 파일로 작성을 해서 인터프리터 방식으로 실행이 된다. 시작은 B::으로 시작되고 ENDDO로 끝을 나타낸다. Cmm 구성 형태를 보면 아래와 같다.
주석문(Comment)
Cmm 문장 중 주석문은 [//] 와 [;]로 표현되는데 실행에는 참여하지 않고, 단지 그 스크립트 명령어가 어떤 역할을 하는지 설명해 주는 것으로 스크립트 문장 중 어느 곳에 와도 무방하다.
변수(Variable)와 명칭(Name: identifier)
cmm에서 변수란 사용자가 부여하는 명칭으로 다음과 같은 규칙이 있다.
- 변수명의 구성은 영문자(A-Z,a-z),숫자(0-9),밑줄(_)로 구성된다.
- 첫 글자는 반드시 영문자로 시작하여야 하며 두 번째 글자부터 영문자, 숫자, 밑줄 어느 것이 와도 무방하다.
- 밑줄은 영문자나 숫자 사이에 나와도 상관없으며 변수의 처음이나 끝 부분에는 나올 수 없다.
- 변수명의 길이는 제한이 없다.
- 변수명에는 예약어나 특수 문자를 사용할 수 없다.
- Global 변수는 대문자, local 변수는 소문자로 구별을 하면 변수 보기가 더 편리하다.
- Global 변수는 다른 cmm 파일내에서도 변수를 사용할 수가 있고, local 변수는 현재 cmm 파일내에서만 사용이 가능하다.
선언문
선언문이란 구현하고자 하는 스크립트가 어떠한 형태인가에 상관없이 동일하게 변수를 사용한다. 즉, 정수형, 실수형,long형,double형 변수가 따로 구분이 없다.
* 상수(Constant)
1) 정수형 상수 : 소수점을 포함하고 있지 않는 10진수(1234.),16진수(0x1234)
2) 실수형 상수 : 소수점을 포함하고 있는 것(1.23, 9.9E5)
3) 문자형 상수 : 문자형을 포함하고 있는 것 (“MDS”,”TRACE32”)
4) 변환 문자: %d – 10진 정수를 표시,%h – 16진로 표시
산술연산자
Example 1.1
관계연산자
논리연산자
비트연산자
Example 1.2
Example 1.3
Example 1.4
Example 1.5
If-else문
if문은 조건절의 내용에 따라서 true나 false값을 반환한다. Else 절은 필요시 기술하며 필요 없을 경우에는 생략할 수 있다. If 조건절 이후 한 문장일 경우에는 블록으로 지정하지 않아도 되지만, 한 문장 이상일 경우에는 괄호를 사용하여 블록으로 지정해야 한다.
조건에 따라 두 개의 절을 수행할 필요가 있을 경우에는 else 절을 기술한다.(example_2_1.cmm)
If문 내에 또 다른 if문이 내포될 수 있다. If 문에서는 필요에 따라 else 절이 생략될 수 있으며, 내포된 if문에서 else절과 관련된 if문은 같은 블록 내의 가장 가까운 if 문이다.( example_2_2.cmm)
While문
반복논리를 제공하기 위해 while, repeat 문을 제공하고 있다. 반복문들은 지정된 문장을 조건이 만족할 때까지 반복한다. 조건을 지정하는 방법에 따라 while, repeat문이 구분되어 사용된다.
(example_3_1.cmm)
지정한 횟수만큼 반복할 때 repeat를 사용한다. (example_3_2.cmm)
Cmm 프로그램 제어를 이동시키기 위해서 goto, return, gosub 문을 제공한다. 이 문장들은 프로그램의 수행 순서를 변화시키는 역할을 한다. (example_3_3.cmm)
문자 입출력
Print 명령어로 출력을 한다.
예) 메시지를 출력한다. (example_4_1.cmm)
enter 명령어로 String 값을 입력할 수가 있다. 입력이 끝난 후 Enter키를 누른다.
예) 메시지를 출력한다. (example_4_2.cmm)
실습) 메뉴 만들기
예) 메시지를 출력한다. (example_4_3.cmm)
파일 입출력
cmm에서는 다양한 방법으로 입출력을 수가 있다. AREA.OPEN, PRINTER.OPEN, OPEN #1, READ #1, WRITE #1 이 있다.
1) AREA.OPEN(example_5_1.cmm)
2) PRINTER.OPEN(example_5_2.cmm)
3) WRITE #1(example_5_3.cmm)
이벤트
시스템(타겟 & PowerView)의 상태가 변할 때 ON-command은 정의되어 있는 PRACTICE 프로그램으로 자동 분기하도록 한다. ON commands들은 PRACTICE 스택 안에 저장 되므로 정의된 블록 내에서만 동작한다.주의 할 점은 ENDDO 혹은 END을 script마지막 부분에 사용해서는 안된다. 이 경우 정의된 이벤트들이 지워진다.
(1) ON COMMANDS 정의 및 용도
(a) POWERUP 이벤트
타겟 파워가 켜질 때 발생된다.
(b) SYSUP 이벤트
PowerView가 active mode로 변할 때 발생된다.
(c) SYSDOWN 이벤트
PowerView가 RESET state로 변할 때 발생된다.
(d) PBREAK 이벤트
타겟 프로그램이 브레이크에 의해서 멈추거나 step시 발생 된다.
(e) PBREKAT 이벤트
특정한 위치에 브레이크를 걸고 타겟을 running시킨 후 이 위치에서 타겟이 멈추면 발생 된다.
Step을 이용해서 이 위치에 갈 경우에도 마찬가지로 설정된 이벤트가 발생 된다.
(f) ERROR 이벤트
cmm파일 내의 command에 의해서 에러가 생길 때 발생 된다.
(a) 단일 이벤트 설정(example_6_1.cmm)
(b) 다중 이벤트 설정(example_6_2.cmm)
Dialog box
Cmm 파일을 이용하여 사용자 GUI환경을 꾸밀 수가 있다.
CHOOSEBOX - Define a choosebox CLOSE - Catch window close COMBOBOX - Define a combobox DEFBUTTON - Define the default button DEFCOMBOBOX - Define a default combo box DEFEDIT - Define an edit control DEFHOTCOMBOBOX - Define a default hot combo box DEFHOTEDIT - Define an hot edit control DEFMEDIT - Define a default multiline edit control DLISTBOX - Define an default listbox DYNCOMBOBOX - Define a dynamic combo box DYNDEFCOMBOBOX - Define a default dynamic combo box DYNDEFHOTCOMBOBOX - Define a dynamic default hot combo box DYNHOTCOMBOBOX - Define a dynamic hot combo box EDIT - Define an edit control HEADER - Define window header HELP - Define a help icon HOTEDIT - Define a hot edit control HOTCOMBOBOX - Define a hot combo box ICON - Define an icon LINE - Define a decorative line LISTBOX - Define a listbox MEDIT - Define a multiline edit control
|
MLISTBOX - Define a multiline listbox POS - Define position and size POSX - Define position and size POSY - Define position and size PULLDOWN - Define a pulldown button SPACE - Define space STATIC TEXT - Define a text item VLINE - Define a decorative vertical line DIALOG.AREA DIALOG.view DIALOG.DIR - Opens file browser DIALOG.Disable - Disable dialog elements DIALOG.Enable - Enable dialog elements DIALOG.Disable - DIALOG.view DIALOG.END Close the dialog window DIALOG.EXecute - Execute a dialog button DIALOG.File - Get a filename with a dialog box DIALOG.FileW - Get a filename with a dialog box DIALOG.OK - Create standard dialog box DIALOG.Program - Interactive programming DIALOG.ReProgram - Batch programming DIALOG.SELect - tbd. DIALOG.Set - Set the value of a dialog element DIALOG.SetDIR DIALOG.SetFile - Get a filename for a dialog element DIALOG.view - Show dialog window |
예제) (example_7_1.cmm)
CMM Debugging
Pedit loadsymbol.cmm
load.cmm 파일 Open
Debug -> Macros
Wr.we.plist : cmm debugging 하는 윈도우
Wr.we.pmacro: cmm 파일내의 Global, local 변수값 확인 윈도우
기능 설명(Tool bar)
기능 설명(Pop_up)
Cmm breakpoint 설정
Cmm breakpoint à continue
cmm 변수값 확인
Command 명령어
Data.set
Memory에 직접 Data 값을 쓰기/읽기
예제) (example_8_1.cmm)
Register.set
Register에 직접 Data 값을 쓰기/읽기
예제) (example_8_2.cmm)
Var.set
Variable에 직접 Data 값을 쓰기/읽기
예제) (example_8_3.cmm)
Break.set
예제) (example_8_4.cmm)
CMM 기초 프로그래밍
Stack 윈도우를 TEXT파일로 저장
Stack 윈도우에 있는 내용을 TEXT 파일로 저장을 하고 싶을 때 사용을 한다.
예제) example_9_1.cmm
엑셀 파일로 변환하기
변수의 값을 logging 한 후 excel 파일로 저장해서 보고 싶을 경우에 사용을 한다.
예제) example_9_2.cmm
Binary 선택
Binary 파일을 매번 dialog로 선택을 하는 것이 아니라 한번 선택을 하게 되면 계속 사용 할 수 있도록 쓰는 예제이다.
예제) example_9_3.cmm
프로그램 실행 횟수와 시간 측정
0x1250 Address에 breakpoint를 설정해 놓고 이 위치를 몇번이나 실행되는지 횟수와 다시 실행될때까지의 시간을 측정을 하고 싶을 때 사용을 할 수가 있다.
예제) example_9_4.cmm
사용자 메뉴 구성
TRACE32 메뉴에 사용자 별도의 메뉴를 구성할 수가 있다.
예제) example_9_5.cmm
AREA을 이용한 메뉴 구성
예제) example_9_6.cmm