MDSTECH
TRACE32
TRACE32 Solution
TRACE32 Trace Solution
TRACE32 More Product
TRACE32 Software Solution
Why TRACE32?
교육신청
정규교육
교육과정 안내
교육장 안내
교육설문
자료실
TRACE32 소프트웨어
TRACE32 매뉴얼
iTSP
TRACE32 영상
인증서
고객지원
뉴스레터
Q&A
FAQ
원격지원
검색창
검색버튼
회원가입
로그인
TRACE32
TRACE32 Solution
TRACE32 Trace Solution
TRACE32 More Product
TRACE32 Software Solution
Why TRACE32?
교육신청
정규교육
교육과정 안내
교육장 안내
교육설문
자료실
TRACE32 소프트웨어
TRACE32 매뉴얼
iTSP
TRACE32 영상
인증서
고객 지원
뉴스레터
Q&A
FAQ
원격지원
사이트맵 보기
SemiHosting 과 그 활용 문서 원본 보기
←
SemiHosting 과 그 활용
이동:
둘러보기
,
검색
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게만 가능합니다:
사용자
문서의 원본을 보거나 복사할 수 있습니다:
<h2><span style="font-size: large;"><strong>Overview</strong></span></h2> <p><span style="font-size: large;"><strong> </strong></span><span style="font-size: small;">본 자료는 타겟에서 수행되는 코드 중 I/O에 관련되는 코드를 캡쳐해서 I/O를 타겟에서 수행하는 것이 아니라 TRACE32 SW(Powerview) 내 에서 수행하게 하는 Semihosting 기능에 대한 가이드 문서입니다.</span></p> <p><span style="font-size: small;"> 즉, Printf나 Scanf와 같이 ANCI C의 라이브러리 함수를 일반적으로 시리얼을 이용해서 하지만 이것을 TRACE32 Terminal 창을 통해서 수행하게 할 수 있습니다. 시리얼을 초기화 하기 전이나 혹은 시리얼을 사용할 수 있는 상황이더라도 추가로 시리얼 케이블을 연결하거나 시리얼 터미널을 이용하지 않고 디버거 내에서 I/O를 수행할 수 있습니다.</span></p> <p><img src="/data/wiki/2015-05-29/1432872205.png" alt="" /></p> <h2><strong><span style="font-size: large;">Semihosting Mechanism (SWI)</span></strong></h2> <p><span style="font-size: small;">ARM 및 Thumb SVC 명령어에는 응용 프로그램 코드에서 사용되는 SVC 번호가 인코딩되어 있는 필드가 있어 시스템 SVC 처리기가 이 번호를 디코딩 가능합니다.</span></p> <p><span style="font-size: small;">* Semihosting interface를 위한 명령어</span></p> <p><span style="font-size: small;"><strong>SVC 0x123456</strong> : 모든 아키텍처에 대해 ARM 상태인 경우</span></p> <p><span style="font-size: small;"><strong>SVC 0xAB</strong> : ARMv6-M 및 ARMv7-M을 제외한 ARM 상태 및 Thumb 상태인 경우.</span></p> <p><span style="font-size: small;">(이 동작은 ARM 또는 타사의 일부 디버거에서만 가능)</span></p> <p><span style="font-size: small;"><strong>BKPT 0xAB</strong> : ARMv6-M 및 ARMv7-M (Thumb 상태만 해당)</span></p> <p> </p> <p><span style="font-size: small;">* R0로 전달되는 사용 가능한 세미호스팅 작업번호 할당</span></p> <p><span style="font-size: small;"><strong>* SYS_WRITE</strong> (0x05) : 현재 파일 위치에서 지정된 파일에 버퍼의 내용 쓸 경우</span></p> <p><span style="font-size: small;">n SYS_SEEK 사용 (명시적)</span></p> <p><span style="font-size: small;">n 이전 SYS_READ 또는 SYS_WRITE 요청의 1바이트 위 (암시적)</span></p> <p><span style="font-size: small;">n printf 함수 수행시 SYS_WRITE 내에 bkpt #0xAB 수행</span></p> <p><span style="font-size: small;"><strong>T32 Terminal </strong><strong>내에서 WRITE일 경우 print하고 넘어감 (</strong>R0에 0x5가 넘겨질 경우)</span></p> <p><span style="font-size: small;"><strong><br /></strong></span></p> <p><span style="font-size: small;">* <strong>SYS_READ</strong> (0x06) : 버퍼로 파일 내용을 읽을 경우</span></p> <p><span style="font-size: small;">n SYS_SEEK 사용 (명시적)</span></p> <p><span style="font-size: small;">n 이전 SYS_READ 또는 SYS_WRITE 요청의 1바이트 위 (암시적)</span></p> <p><span style="font-size: small;">n Scanf 함수 수행시 SYS_READ 내에 bkpt #0xAB 수행으로 ARMSWI 방식 처리</span></p> <p><span style="font-size: small;"><strong>T32 Semihosting</strong><strong>수행시 READ일 경우 “stopped for terminal” 로 멈춰있음 </strong>(R0에 0x6가 넘겨질 경우)</span></p> <p><span style="font-size: small;"><strong><strong><br /></strong></strong></span></p> <p><span style="font-size: small;"><strong>* SYS_SEEK (0x0A)</strong> : 파일 시작부터 지정된 오프셋을 사용하여 파일에서 지정된 위치 검색</span></p> <p><span style="font-size: small;">파일은 바이트 배열로 가정되고 오프셋은 바이트 단위로 제공</span></p> <p><img src="/data/wiki/2015-05-29/1432872622.png" alt="" /></p> <p> </p> <p> </p> <h2><span style="font-size: large;"><strong style="font-size: large;">Compiler 적용 방법 (for Cortex-M)</strong></span></h2> <p><span style="font-size: small;">1) IAR EWARM</span></p> <p><span style="font-size: small;">- IAR Compiler에서는 Semihosting Library 제공</span></p> <p><span style="font-size: small;">- Option 적용으로 Semihosting interface 가능</span></p> <p> <img src="/data/wiki/2015-05-29/1432871673.png" alt="" /></p> <p><span style="font-size: small;">2) Keil uVision</span></p> <p><span style="font-size: small;">Retargeting 코드가 적용되지 않을 경우, Semihosting Library 제공</span></p> <p><span style="font-size: small;">Option 적용없이 기본적으로 사용 가능</span></p> <h2><strong><span style="font-size: large;">TRACE32 를 이용한 Semihosting 방법</span></strong></h2> <p><span style="font-size: small;">TRACE32를 이용하여 Semihosting 실행할 경우, TRACE32 내의 Terminal 창을 이용하여 printf 로그를 남기고 scanf 문자를 받는 것을 실행할 수 있습니다. Semihosting 방법에 따라 Terminal Method 설정이 필요합니다. </span></p> <p><span style="font-size: small;"><strong>TERM.METHOD <mode></strong></span></p> <p><span style="font-size: small;"><strong>TERM.GATE</strong></span></p> <p><span style="font-size: small;"><strong><br /></strong></span></p> <h3><strong><span style="font-size: small;">SVC (SWI) Emulation Mode</span></strong></h3> <p><span style="font-size: small;">* SVC mode 동작 순서</span></p> <p><span style="font-size: small;">① SVC exception에 설정된 breakpoint는 application을 멈춤</span></p> <p><span style="font-size: small;">② stop되어 있는 동안 디버거는 요청사항 처리, host와 통신</span></p> <p><span style="font-size: small;">③ SVC exception call 에 Link Register R14 주소에 application을 위치하고 재실행</span></p> <p><span style="font-size: small;">④ SVC parameter는 0x123456<strong> </strong></span></p> <p> <img src="/data/wiki/2015-05-29/1432871687.png" alt="" /></p> <p><span style="font-size: small;">** Script 작성 예</span></p> <p><span style="font-size: small;"><img src="/data/wiki/2015-05-29/1432871910.png" alt="" /><br /></span></p> <p><span style="font-size: small;"><strong>TrOnchip.Set SWI ON</strong>.</span></p> <p><span style="font-size: small;"><strong>TERM.METHOD ARMSWI [<address>]</strong></span></p> <p><span style="font-size: small;"><strong>TERM.GATE</strong></span></p> <p> <img src="/data/wiki/2015-05-29/1432871753.png" alt="" /> </p> <p> </p> <h3><strong><span style="font-size: small;">DCC Communication Mode (DCC = Debug Communication Channel)</span></strong></h3> <p><span style="font-size: small;">Semihosting exception handler는 SVC(SWI) exception 처리</span></p> <p><span style="font-size: small;">JTAG interface에 기반한 DCC를 이용, Target application은 stop하지 않고 처리</span></p> <p><span style="font-size: small;">semihosting exception handler는 application에 링크되어 있어야 함</span></p> <p><span style="font-size: small;">ð <strong>TERM.METHOD DCC3 </strong></span></p> <p><span style="font-size: small;">ð <strong>TERM.GATE</strong></span></p> <p><span style="font-size: small;"><strong><br /></strong></span></p> <p> <img src="/data/wiki/2015-05-29/1432871765.png" alt="" /></p> <p><span style="font-size: small;">* script 작성 예시</span></p> <p><span style="font-size: small;"><img src="/data/wiki/2015-05-29/1432871779.png" alt="" /><br /></span></p> <p><span style="font-size: small;">ARM compatible semihosting handler</span></p> <p><span style="font-size: small;">à t32swi.c, t32helper_x.c</span></p> <p><span style="font-size: small;">demo/arm/etc/semihosting_arm_dcc 경로 확인가능</span></p> <p> <img src="/data/wiki/2015-05-29/1432871807.png" alt="" /></p> <p> </p> <p><img src="/data/wiki/2015-05-29/1432871821.png" alt="" /></p> <p><span style="font-size: small;">* script 작성예시</span></p> <p><span style="font-size: small;"><img src="/data/wiki/2015-05-29/1432871826.png" alt="" /><br /></span></p> <p><span style="font-size: small;">SWI handler (t32swi.c) is not required</span></p> <p><span style="font-size: small;">DCC에 direct로 요청을 보냄</span></p> <p><span style="font-size: small;">T32 경로 : demo\arm\etc\semihosting_trace32_dcc 참고</span></p> <p><span style="font-size: small;"><br /></span></p> <h3><strong><span style="font-size: small;">Memory based interface for Cortex-M</span></strong></h3> <p><span style="font-size: small;">- Cortex-M계열은 DCC를 지원하지 않는다. 따라서 특정 RAM 영역을 할당하여 I/O로 활용</span></p> <p><span style="font-size: small;">- 타겟을 멈추지 않고 SWI없이 실행할 경우</span></p> <p> <img src="/data/wiki/2015-05-29/1432871842.png" alt="" /></p> <p><span style="font-size: small;">* script 작성예시</span></p> <p> <img src="/data/wiki/2015-05-29/1432871847.png" alt="" /></p> <p><span style="font-size: small;"><strong>TERM.METHOD SingleE <output> <input></strong></span></p> <p><span style="font-size: small;"><strong>TERM.METHOD BufferE <output> <input></strong></span></p>
SemiHosting 과 그 활용
문서로 돌아갑니다.
둘러보기 메뉴
개인 도구
로그인
이름공간
문서
토론
변수
보기
읽기
원본 보기
역사 보기
행위
검색
TRACE32 Dummy
TRACE32
iTSP User's Guide
aTSP User's Guide
Linux Debugging
Debugging Tips
Trace Analysis
Virtual Target
TRACE32로 바라본 ARM
TRACE32 FAQ
TRACE32 Trouble Shooting
TRACE32 Software Update
Software Revision History
DT10 / DT-Win
다운로드
DT10 Evaluation
DT-Win Evaluation
TestPoint 삽입 Error
Build Error
DT10 FAQ
도구
여기를 가리키는 문서
가리키는 글의 바뀜
특수 문서 목록
문서 정보