Semihosting
목적
- 마이크로컨트롤러의 Semihosting 개념을 이해하고 Debugger를 사용하여
printf()
를 활용할 수 있도록 힌다.
참고자료
-
[Semihosting - SEGGER Wiki]: https://wiki.segger.com/Semihosting
-
[Semihosting with GNU ARM Embedded - MCU on Eclipse]: https://mcuoneclipse.com/2014/09/11/semihosting-with-gnu-arm-embedded-launchpad-and-gnu-arm-eclipse-debug-plugins/
-
[DAVE TIP of the day: Semihosting in DAVEv4]: https://www.infineonforums.com/threads/3489-DAVE-TIP-of-the-day-Semihosting-in-DAVEv4
Semihosting 개념
- Semihosting이란 현재 활성화 되어 있는 디버거를 통하여
printf()
를 실행하는 방법- 별도의 통신 채널을 확보할 필요가 없으므로 간단하게 활용 가능
- ARM 계열에서는 이를 위한 특별한 exception 명령을 가지고 있다
- exception 명령 사용하는 debug agent를 실행하여 기능을 수행한다.
- [주의]
scanf()
도 활용 가능하다고 설명되어 있으나, DAVE 상에서는 실행이 되지 않는 것으로 판단된다.
설정 및 활용 방법
다음의 단계를 거쳐서 설정한다.
- GNU Linker 의 Option 설정
- GDB의 semihosting 관련 기능 활성화
- Source 코드에서 관련 함수 초기화
GNU Linker Option 설정
-
다음의 내용을
Project > Properties > C/C++ Build > Settings 에서 설정해 준다.
--specs=rdimon.specs
GDB Option 설정
Source 코드의 추가 사항
XMC_DEBUG()
함수를 사용할 수 있도록XMC_DEBUG_ENABLE
을 정의해 준다.
printf()
함수를 활성화 하기 위하여initialise_monitor_handles(void)
를 호출하여 준다.
실행 결과
Summary
- 간단하게
printf()
를 사용할 수 있다. - 내부적으로 exception을 사용하여 IO를 처리하므로 real-time performance를 떨어뜨릴 수 있다.
- 간단한 단위시험이나, idle 실행 시 상태를 모니터링 하는 정도로 활용하는 것이 적합하다고 판단된다.