SemiHosting 과 그 활용

TRACE32
Admin (토론 | 기여) 사용자의 2015년 5월 29일 (금) 13:56 판

(비교) ← 이전 판 | 최신판 (비교) | 다음 판 → (비교)
이동: 둘러보기, 검색

Overview

 본 자료는 타겟에서 수행되는 코드 중 I/O에 관련되는 코드를 캡쳐해서 I/O를 타겟에서 수행하는 것이 아니라 TRACE32 SW(Powerview) 내 에서 수행하게 하는 Semihosting 기능에 대한 가이드 문서입니다.

 즉, Printf나 Scanf와 같이 ANCI C의 라이브러리 함수를 일반적으로 시리얼을 이용해서 하지만 이것을 TRACE32 Terminal 창을 통해서 수행하게 할 수 있습니다. 시리얼을 초기화 하기 전이나 혹은 시리얼을 사용할 수 있는 상황이더라도 추가로 시리얼 케이블을 연결하거나 시리얼 터미널을 이용하지 않고 디버거 내에서 I/O를 수행할 수 있습니다.

 

Semihosting Mechanism (SWI)

ARM 및 Thumb SVC 명령어에는 응용 프로그램 코드에서 사용되는 SVC 번호가 인코딩되어 있는 필드가 있어 시스템 SVC 처리기가 이 번호를 디코딩 가능합니다.

 

* Semihosting interface를 위한 명령어

SVC 0x123456 : 모든 아키텍처에 대해 ARM 상태인 경우

SVC 0xAB : ARMv6-M 및 ARMv7-M을 제외한 ARM 상태 및 Thumb 상태인 경우.

(이 동작은 ARM 또는 타사의 일부 디버거에서만 가능)

BKPT 0xAB : ARMv6-M 및 ARMv7-M (Thumb 상태만 해당)

 

* R0로 전달되는 사용 가능한 세미호스팅 작업번호 할당

* SYS_WRITE (0x05) : 현재 파일 위치에서 지정된 파일에 버퍼의 내용 쓸 경우

n  SYS_SEEK 사용 (명시적)

n  이전 SYS_READ 또는 SYS_WRITE 요청의 1바이트 위 (암시적)

n  printf 함수 수행시 SYS_WRITE 내에 bkpt #0xAB 수행

T32 Terminal 내에서 WRITE일 경우 print하고 넘어감 (R0에 0x5가 넘겨질 경우)


* SYS_READ (0x06) : 버퍼로 파일 내용을 읽을 경우

n  SYS_SEEK 사용 (명시적)

n  이전 SYS_READ 또는 SYS_WRITE 요청의 1바이트 위 (암시적)

n  Scanf 함수 수행시 SYS_READ 내에 bkpt #0xAB 수행으로 ARMSWI 방식 처리

T32 Semihosting수행시 READ일 경우 “stopped for terminal” 로 멈춰있음 (R0에 0x6가 넘겨질 경우)


* SYS_SEEK (0x0A) : 파일 시작부터 지정된 오프셋을 사용하여 파일에서 지정된 위치 검색

파일은 바이트 배열로 가정되고 오프셋은 바이트 단위로 제공

 

 

Compiler 적용 방법 (for Cortex-M)

1) IAR EWARM

- IAR Compiler에서는 Semihosting Library 제공

- Option 적용으로 Semihosting interface 가능

   

 

2) Keil uVision

Retargeting 코드가 적용되지 않을 경우, Semihosting Library 제공

Option 적용없이 기본적으로 사용 가능

                           

TRACE32 를 이용한 Semihosting 방법

TRACE32를 이용하여 Semihosting 실행할 경우, TRACE32 내의 Terminal 창을 이용하여 printf 로그를 남기고 scanf 문자를 받는 것을 실행할 수 있습니다. Semihosting 방법에 따라 Terminal Method 설정이 필요합니다. 

TERM.METHOD <mode>

TERM.GATE


SVC (SWI) Emulation Mode

* SVC mode 동작 순서

① SVC exception에 설정된 breakpoint는 application을 멈춤

② stop되어 있는 동안 디버거는 요청사항 처리, host와 통신

③ SVC exception call 에 Link Register R14 주소에 application을 위치하고 재실행

④ SVC parameter는 0x123456 

   

** Script 작성 예


TrOnchip.Set SWI ON.

TERM.METHOD ARMSWI [<address>]

TERM.GATE

   

 

DCC Communication Mode (DCC = Debug Communication Channel)

Semihosting exception handler는 SVC(SWI) exception 처리

JTAG interface에 기반한 DCC를 이용, Target application은 stop하지 않고 처리

semihosting exception handler는 application에 링크되어 있어야 함

 TERM.METHOD DCC3

 TERM.GATE


       

* script 작성 예시


ARM compatible semihosting handler

à t32swi.c, t32helper_x.c

T32경로 : demo/arm/etc/semihosting_arm_dcc 경로 확인가능


   

              

 

* script 작성예시


SWI handler (t32swi.c) is not required

DCC에 direct로 요청을 보냄

T32 경로 : demo\arm\etc\semihosting_trace32_dcc 참고


Memory based interface for Cortex-M

-      Cortex-M계열은 DCC를 지원하지 않는다. 따라서 특정 RAM 영역을 할당하여 I/O로 활용

-      타겟을 멈추지 않고 SWI없이 실행할 경우

   

* script 작성예시

 

TERM.METHOD SingleE <output> <input>

TERM.METHOD BufferE <output> <input>