사이트맵 보기

FAQ

리스트 게시판
[PRACTICE] PRACTICE 스크립트에서 메모리를 읽거나 메모리에 기록하려면 어떻게 해야 하나요?

Raw Memory 쓰기

PRACTICE 스크립트에서 메모리 위치(또는 메모리 매핑 레지스터에 쓰기)를 작성하는 것은 다음 명령과 함께 작동합니다
Data.Set <address> %<format> <value>


16진수 값은 접두사 "0x"로 작성해야 하며, 10진수 값은 점 "."으로 끝나야 합니다.

예시:

Data.Set D:0x1000 %Long 0x12345678
Data.Set D:0x3000 %Long 42.


"format"은 작성할 데이터의 너비를 지정합니다.

%Byte 는 8비트를 의미

%Word는 16비트를 의미

%Long는 32비트를 의미

%Quad는 64비트를 의미


3,5,6,7바이트 너비에 대한 형식 지정자도 있습니다.
고정 주소를 사용하는 대신 이미 ELF 파일을 로드한 경우, label을 사용할 수도 있습니다.
Data.Set _IntVec1 %Long 0x800000

어플리케이션의 C/C++ 코드에서 선언된 상위 수준 변수를 작성하는 경우 Var.set 명령을 사용하는 것이 더 편리합니다.




Raw Memory 읽기

PRACTICE 스크립트에서 메모리 위치(또는 메모리 매핑 레지스터로 읽기)를 읽는 것은 PRACTICE 기능과 함께 작동합니다
Data.<value width>()
여기서 <value width>는 Byte, Word, Long, Quad를 나타냅니다.

PRACTICE 기능은 PRACTICE 명령 내에서 사용하거나 PRACTICE 매크로에 할당해야 합니다.
예시:

ECHO DATA.Long(D:0x1000)

PRIVATE &myvalue
&myvalue=DATA.Word(D:0x4020)
ECHO "My value is " &myvalue


Data.Set D:0x1000 %Long DATA.Long(D:0x1000)|1

세 번째 예는 주소 0x1000에서 32비트 값의 최하위 비트를 설정하기 위해 읽기-수정-쓰기를 수행하는 방법을 보여줍니다.
어플리케이션의 C/C++ 코드에서 선언된 높은 수준의 변수를 읽는 경우 Var.VALUE() 함수를 사용하는 것이 더 편리합니다.




Variables 쓰기
(ELF를 로드한 후) PRACTICE 스크립트를 통해 프로그램의 변수를 작성하는 것은 다음 명령과 함께 작동합니다.

Var.set <variable name>=<value>

예시:

Var.set myvar=0x100
Var.set flags=flags|0x10


두 번째 예는 "flags"라는 변수의 비트 8을 설정하기 위해 읽기-수정-쓰기를 수행합니다.

Var.로 시작하는 모든 명령어는 기본적으로 "C/C++에서 하는 것처럼"을 의미하는 "High Level Language" 표현식을 처리하는 방식에서 특별하다는 점에 유의하세요.

따라서 여기서는 십진수 값 뒤에 점이 따를 필요가 없습니다. 또한 Training HLL Debugging의 "Change a Variable Value" 장도 참조하세요.




Variables 읽기
(ELF를 로드한 후) PRACTICE 스크립트를 통해 프로그램의 변수를 읽는 것은 이 기능과 함께 작동합니다.

Var.VALUE(variable name)


예시:

ECHO Var.VALUE(myvar)
WAIT (Var.VALUE(flags)&0x10)==0x10


두 번째 예시는 'flags'라는 변수에서 비트 8이 설정될 때까지 스크립트 실행을 중단합니다.


관련 문서:


다른 궁금한 사항은 trace32@mdstech.co.kr로 문의주십시오.

감사합니다.


[PRACTICE] Dialog 창 내에서 Practice Macro를 사용할 수 있습니까?

가능합니다.

Dialog 블록의 시작 부분에 문자 "&"를 추가해야 하며, 그렇지 않으면 Macro가 해당 블록 내에서 확장되지 않습니다.


예시 :

DIALOG.view
(&+
...
)


다른 궁금한 사항은 TRACE32@mdstech.co.kr 로 문의 주십시오.

감사합니다.

[PRACTICE] TRACE32 PwoerView의 window를 호스트PC 에 저장하는 방법이 있나요?

다음은 TRACE32 window를 파일로 출력할 때 사용할 수 있는 명령어들입니다:


B::PRinTer.FILE B::WinPrint 명령을 사용하여 TRACE32 window의 내용을 파일로 출력할 수 있습니다.

B::PRinTer.FILE 명령어

  • /Append 옵션을 사용하면 기존 파일에 데이터를 추가할 수 있습니다.
  • /Append 옵션이 없을 경우, 해당 파일이 이미 존재한다면 파일 내용은 덮어 씌워집니다.


사용 예시:

  • B:: PRinTer.FILE output.txt /Append
  • B:: WinPrint.Trace.List
  • B:: WinPrint.Data.dump 0--0xfff

  • B:: PRinTer.FILE file01.html XHTML
  • B:: WinPrint.List.Mix func7--func17

더 많은 사용 예시는 TRACE32 설치 폴더 > pdf > Ide_func.pdf 에서 확인할 수 있습니다.


다른 궁금한 사항은 TRACE32@mdstech.co.kr 로 문의 주십시오.

감사합니다

[PRACTICE] Break.Set
/CMD "DO script.cmm" /RESUME 명령어를 사용할 때 "PRACTICE Stack Overflow" 오류 발생

이 오류는 해당 breakpoint가 빈번하게 실행될 때 발생합니다.

/RESUME 옵션은 스크립트 실행 후 프로그램 실행을 다시 시작하지만, 스크립트 실행이 끝날 때까지 기다리지 않습니다.


두 번째 breakpoint가 HIT되면 첫 번째 스크립트가 여전히 실행 중인 상태에서 두 번째 스크립트가 시작됩니다.

breakpoint가 자주 실행되면 병렬로 실행되는 스크립트 수가 특정 최대치를 초과하고, 이로 인해 "PRACTICE Stack Overflow" 오류가 발생할 수 있습니다.

이를 해결하려면 다음 해결책 중 하나를 사용할 수 있습니다:


● /RESUME 옵션을 제거하고 스크립트의 끝에 Go 명령을 삽입하세요.
이 경우 스크립트가 끝난 후에 실행이 다시 시작됩니다.
하지만 breakpoint가 자주 실행되면 여전히 "PRACTICE Stack Overflow" 오류가 발생할 수 있습니다.


DO 명령어를 개별 PRACTICE 명령어로 교체하세요. 예를 들어,

Break.Set < address > /CMD "DO script.cmm" /RESUME

대신,

Break.Set < address > /CMD "" /CMD "" ... /RESUME

스크립트 내에서 DO 명령어를 JUMPTO로 교체하세요. 예를 들어:

Break.Set < address > /CMD "JUMPTO do_it"

STOP

do_it:

...

Go

STOP


또한, PRACTICE 스크립트 내에서 /CMD 옵션 대신에 다음 명령을 사용할 수 있습니다:

Break.Set < address >

RePeaT

(

Go
WAIT !STATE.RUN()
< break handling >
)


다른 궁금한 사항은 TRACE32@mdstech.co.kr 로 문의 바랍니다.

감사합니다.

[PRACTICE] 브레이크포인트가 hit 되었을때 cmm script를 실행 시킬 수 있나요???

아래와 같은 명령어를 통해 breakpoint를 setting하거나 아래 스크린샷과 같이 설정하면 가능합니다.


break.set /program /CMD "Do myscript.cmm"




호출된 cmm script의 끝에 "go" 명령어를 추가하여 타겟의 실행을 계속할 수 있습니다.


break.set 명령어는 /resume 옵션도 허용하며,

/resume 옵션을 추가 혹은 허용할 경우 do myscript.cmm 명령어가 실행된 후 프로그램 실행을 재개합니다.


주의사항으로,

스크립트를 실행하는데 시간이 오래걸린다면, practice 스크립트가 완료될 때까지 기다리지 않으므로, 사용하지 않는게 좋습니다.


추가로 궁금한 사항은 TRACE32@mdstech.co.kr 로 문의 주십시오.

감사합니다.

[PRACTICE] 논리적 조건으로 중단점을 설정 할 수 있나요?

Break.set 명령어에는 /VarCONDition 옵션이 있으며,

이 옵션을 사용하면 설정된 breakpoint에 도달한 후 CPU 가 중지된 상태로 유지되는 조건을 지정할 수 있습니다.

(breakpoint를 설정하기 위한 다이얼로그에서 "advanced" 항목을 클릭하면, "Condition" 필드를 찾을 수 있습니다.)


Example : 함수 MyFunc에 변수 x==10 및 y==11 옵션으로 breakpoint를 설정합니다.

Break.Set MyFunc /VarCONDition (x==10 && y==11)

결과적으로, MyFunc 함수가 실행될 때마다 CPU 가 중지되지만, 조건 "x==10 && y==11"를 만족하지 않으면, 재 실행됩니다.


PRACTICE 언어로 Break.Set 명령어에 /VarCONDition 옵션 대신 /CONDition을 사용하여 조건을 지정할 수도 있습니다.

이는 Break.Set 창의 CONDition 필드의 HLL 체크박스를 체크 해제하는 것에 해당합니다.


Example : 첫 번째 예제의 동일한 조건으로 다음과 같이 사용할 수 있습니다.

Break.Set MyFunc /CONDition (Var.Value(x)==10. && Var.Value(y)==11.)


참고 : 

PRACTICE의 기본 기수 모드는 16진수이므로 10진수 값을 나타내기 위해 10과 11 뒤에 '온점'을 추가해야 합니다.

그렇지 않으면 0x10과 0x11이 기본적으로 사용됩니다.


다른 궁금한 사항은 TRACE32@mdstech.co.kr 로 문의 바랍니다

감사합니다.

고객문의/
견적문의
기술지원/
데모/
SW요청
031-627-
3116