"Script Programming"의 두 판 사이의 차이

TRACE32
이동: 둘러보기, 검색
195번째 줄: 195번째 줄:
 
<p><img src="/data/wiki/2015-02-16/1424063407.png" alt="" /></p>
 
<p><img src="/data/wiki/2015-02-16/1424063407.png" alt="" /></p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
<h3>load.cmm 파일 Open</h3>
+
<h2><strong><span style="font-size: large;">load.cmm 파일 Open</span></strong></h2>
 
<p><img src="/data/wiki/2015-02-16/1424060586.png" alt="" /></p>
 
<p><img src="/data/wiki/2015-02-16/1424060586.png" alt="" /></p>
<p>&nbsp;</p>
+
<h2><strong><span style="font-size: large;">Debug -&gt; Macros</span></strong></h2>
<h3>Debug -&gt; Macros</h3>
+
 
<p>Wr.we.plist : cmm debugging 하는 윈도우</p>
 
<p>Wr.we.plist : cmm debugging 하는 윈도우</p>
 
<p>Wr.we.pmacro: cmm 파일내의 Global, local 변수값 확인 윈도우</p>
 
<p>Wr.we.pmacro: cmm 파일내의 Global, local 변수값 확인 윈도우</p>
 
<p><img src="/data/wiki/2015-02-16/1424060612.png" alt="" /></p>
 
<p><img src="/data/wiki/2015-02-16/1424060612.png" alt="" /></p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
<h3>기능 설명(Tool bar)</h3>
+
<h2><span style="font-size: large;">기능 설명(Tool bar)</span></h2>
 
<p><img src="/data/wiki/2015-02-16/1424063537.png" alt="" /></p>
 
<p><img src="/data/wiki/2015-02-16/1424063537.png" alt="" /></p>
 
<p><img src="/data/wiki/2015-02-16/1424060644.png" alt="" /></p>
 
<p><img src="/data/wiki/2015-02-16/1424060644.png" alt="" /></p>
212번째 줄: 211번째 줄:
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
<h3>Cmm breakpoint 설정</h3>
+
<h2><strong><span style="font-size: large;">Cmm breakpoint 설정</span></strong></h2>
 
<p>Cmm breakpoint &agrave; continue</p>
 
<p>Cmm breakpoint &agrave; continue</p>
 
<p><img src="/data/wiki/2015-02-16/1424060738.png" alt="" /></p>
 
<p><img src="/data/wiki/2015-02-16/1424060738.png" alt="" /></p>
<p>&nbsp;</p>
+
<h2><strong><span style="font-size: large;">cmm 변수값 확인</span></strong></h2>
<h3>cmm 변수값 확인</h3>
+
 
<p><img src="/data/wiki/2015-02-16/1424060760.png" alt="" /></p>
 
<p><img src="/data/wiki/2015-02-16/1424060760.png" alt="" /></p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
<h2>Command 명령어</h2>
+
<h2><strong><span style="font-size: x-large;">Command 명령어</span></strong></h2>
<h3>Data.set&nbsp;</h3>
+
<h2><strong><span style="font-size: large;">Data.set&nbsp;</span></strong></h2>
 
<p>Memory에 직접 Data 값을 쓰기/읽기</p>
 
<p>Memory에 직접 Data 값을 쓰기/읽기</p>
 
<div><img src="/data/wiki/2015-02-16/1424063575.png" alt="" /></div>
 
<div><img src="/data/wiki/2015-02-16/1424063575.png" alt="" /></div>
 
<p>예제) (example_8_1.cmm)</p>
 
<p>예제) (example_8_1.cmm)</p>
 
<div><img src="/data/wiki/2015-02-16/1424063582.png" alt="" /></div>
 
<div><img src="/data/wiki/2015-02-16/1424063582.png" alt="" /></div>
<h3>Register.set&nbsp;</h3>
+
<h2><strong><span style="font-size: large;">Register.set&nbsp;</span></strong></h2>
 
<p>Register에 직접 Data 값을 쓰기/읽기</p>
 
<p>Register에 직접 Data 값을 쓰기/읽기</p>
 
<div><img src="/data/wiki/2015-02-16/1424063587.png" alt="" /></div>
 
<div><img src="/data/wiki/2015-02-16/1424063587.png" alt="" /></div>
 
<p>예제) (example_8_2.cmm)</p>
 
<p>예제) (example_8_2.cmm)</p>
 
<div><img src="/data/wiki/2015-02-16/1424063625.png" alt="" /></div>
 
<div><img src="/data/wiki/2015-02-16/1424063625.png" alt="" /></div>
<h3>Var.set&nbsp;</h3>
+
<h2><strong><span style="font-size: large;">Var.set&nbsp;</span></strong></h2>
 
<p>Variable에 직접 Data 값을 쓰기/읽기</p>
 
<p>Variable에 직접 Data 값을 쓰기/읽기</p>
 
<div><img src="/data/wiki/2015-02-16/1424063646.png" alt="" /></div>
 
<div><img src="/data/wiki/2015-02-16/1424063646.png" alt="" /></div>
 
<p>예제) (example_8_3.cmm)</p>
 
<p>예제) (example_8_3.cmm)</p>
 
<div><img src="/data/wiki/2015-02-16/1424063654.png" alt="" /></div>
 
<div><img src="/data/wiki/2015-02-16/1424063654.png" alt="" /></div>
<h3>Break.set&nbsp;</h3>
+
<h2><strong><span style="font-size: large;">Break.set&nbsp;</span></strong></h2>
 
<p><img src="/data/wiki/2015-02-16/1424063670.png" alt="" /></p>
 
<p><img src="/data/wiki/2015-02-16/1424063670.png" alt="" /></p>
 
<p>예제) (example_8_4.cmm)</p>
 
<p>예제) (example_8_4.cmm)</p>
 
<p><img src="/data/wiki/2015-02-16/1424064787.png" alt="" /></p>
 
<p><img src="/data/wiki/2015-02-16/1424064787.png" alt="" /></p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
<h1>CMM 기초 프로그래밍</h1>
+
<h1><span style="font-family: 굴림; font-size: small;"> </span></h1>
<h3><span style="font-size: 1.17em;">Stack 윈도우를 TEXT파일로 저장</span></h3>
+
<h2 style="margin: 0cm 0cm 8pt;"><strong><span lang="EN-US" style="color: black; line-height: 107%; font-family: &quot;Verdana&quot;,sans-serif; font-size: 36pt; mso-bidi-font-family: &quot;Times New Roman&quot;; mso-bidi-theme-font: minor-bidi;">CMM 기초 프로그래밍</span></strong></h2>
 +
<h2><strong><span style="font-size: x-large;">Stack 윈도우를 TEXT파일로 저장</span></strong></h2>
 
<p>Stack 윈도우에 있는 내용을 TEXT 파일로 저장을 하고 싶을 때 사용을 한다.</p>
 
<p>Stack 윈도우에 있는 내용을 TEXT 파일로 저장을 하고 싶을 때 사용을 한다.</p>
 
<p>예제) example_9_1.cmm</p>
 
<p>예제) example_9_1.cmm</p>
 
<p><img src="/data/wiki/2015-02-16/1424064800.png" alt="" /></p>
 
<p><img src="/data/wiki/2015-02-16/1424064800.png" alt="" /></p>
<h3>엑셀 파일로 변환하기</h3>
+
<h2><strong><span style="font-size: x-large;">엑셀 파일로 변환하기</span></strong></h2>
 
<p>변수의 값을 logging 한 후 excel 파일로 저장해서 보고 싶을 경우에 사용을 한다.</p>
 
<p>변수의 값을 logging 한 후 excel 파일로 저장해서 보고 싶을 경우에 사용을 한다.</p>
 
<p>예제) example_9_2.cmm</p>
 
<p>예제) example_9_2.cmm</p>
 
<div><img src="/data/wiki/2015-02-16/1424064041.png" alt="" /></div>
 
<div><img src="/data/wiki/2015-02-16/1424064041.png" alt="" /></div>
<h3>Binary 선택</h3>
+
<h2><strong><span style="font-size: x-large;">Binary 선택</span></strong></h2>
 
<p>Binary 파일을 매번 dialog로 선택을 하는 것이 아니라 한번 선택을 하게 되면 계속 사용 할 수 있도록 쓰는 예제이다.</p>
 
<p>Binary 파일을 매번 dialog로 선택을 하는 것이 아니라 한번 선택을 하게 되면 계속 사용 할 수 있도록 쓰는 예제이다.</p>
 
<p>예제) example_9_3.cmm</p>
 
<p>예제) example_9_3.cmm</p>
 
<p><img src="/data/wiki/2015-02-16/1424064260.png" alt="" /></p>
 
<p><img src="/data/wiki/2015-02-16/1424064260.png" alt="" /></p>
<h3>프로그램 실행 횟수와 시간 측정</h3>
+
<h2><strong><span style="font-size: x-large;">프로그램 실행 횟수와 시간 측정</span></strong></h2>
 
<p>0x1250 Address에 breakpoint를 설정해 놓고 이 위치를 몇번이나 실행되는지 횟수와 다시 실행될때까지의 시간을 측정을 하고 싶을 때 사용을 할 수가 있다.</p>
 
<p>0x1250 Address에 breakpoint를 설정해 놓고 이 위치를 몇번이나 실행되는지 횟수와 다시 실행될때까지의 시간을 측정을 하고 싶을 때 사용을 할 수가 있다.</p>
 
<p>예제) example_9_4.cmm</p>
 
<p>예제) example_9_4.cmm</p>
 
<p><img src="/data/wiki/2015-02-16/1424064282.png" alt="" /></p>
 
<p><img src="/data/wiki/2015-02-16/1424064282.png" alt="" /></p>
<h3>사용자 메뉴 구성</h3>
+
<h2><strong><span style="font-size: x-large;">사용자 메뉴 구성</span></strong></h2>
 
<p>TRACE32 메뉴에 사용자 별도의 메뉴를 구성할 수가 있다.</p>
 
<p>TRACE32 메뉴에 사용자 별도의 메뉴를 구성할 수가 있다.</p>
 
<p>예제) example_9_5.cmm</p>
 
<p>예제) example_9_5.cmm</p>
 
<p><img src="/data/wiki/2015-02-16/1424065124.png" alt="" /></p>
 
<p><img src="/data/wiki/2015-02-16/1424065124.png" alt="" /></p>
<h3>AREA을 이용한 메뉴 구성</h3>
+
<h2><strong><span style="font-size: x-large;">AREA을 이용한 메뉴 구성</span></strong></h2>
 
<p>예제) example_9_6.cmm</p>
 
<p>예제) example_9_6.cmm</p>
 
<p><img src="/data/wiki/2015-02-16/1424065501.png" alt="" /></p>
 
<p><img src="/data/wiki/2015-02-16/1424065501.png" alt="" /></p>

2015년 10월 16일 (금) 13:58 판

시작하기 전에

본 문서는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