티스토리 뷰
ARM 기반 MCU 개발시 디버그 메시지 출력용으로 사용할 여분의 Serial 입/출력 포트가 없는 경우 Semihosting 을 이용하면 printf/scanf 등의 표준 입출력함수를 이용하여 디버거 에이전트를 통해서 디버그 메시지 출력이 가능하다.
SWD (Serial Wire Debugger) 를 사용한다면 SWDIO, SWCLK 기본 2핀에 추가로 SWO 핀을 사용하여 디버그 메시지를 출력하는 방법도 있다. 하지만 SWD 2핀만 연결된 보드를 사용하여 개발하는 경우나 Jtag 를 사용하는 경우에는 semihosting 을 이용하는 방법을 정리해두록 한다. 개발 환경은 SW4STM + ST-Link V2 이다.
우선 semihosting 의 정의는 아래와 같다.
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0203ik/Bgbjjgij.html
1) Project -> Properties -> C/C++ Build -> Settings 의 MCU GCC Linker 에서 아래와 같이 Linker flag 를 추가한다.
2. main() 위에 아래와 같은 extern 함수를 선언한다.
3. main() 함수에서 앞서 선언한 initialise_monitor_handles() 를 호출한다.
4. Debug 설정의 Startup 설정에서 semihosting 을 enable 시켜준다. 아래와 같이 initialize 명령에 "monitor arm semihosting enable" 명령을 추가해준다.
5. 이제 printf , putc, puts 와 같은 표준 출력함수들을 이용한 디버그 메시지 출력이 가능하다.
참조자료
http://www.openstm32.org/forumthread2949
'etc' 카테고리의 다른 글
__init , __initdata, __exit, __exitdata (0) | 2013.07.26 |
---|---|
__read_mostly 매크로의 의미 (0) | 2013.07.26 |