제품 개발 중 문제점을 찾기 위한 가장 간단한 방법은 printf를 사용하여 디버깅 메시지를 출력하는 방법입니다.
Debugging 장비를 사용할 수 없는 경우 문제점을 확인하기 위해 디버깅 메시지를 출력합니다.
또는 시스템의 Log를 확인하기 위해 메시지를 출력하기도 합니다.
가장 유명한 System Log
디버깅 메시지를 출력하는 몇 가지 방법에 관해 설명합니다.
1. Semihosting
ARM Core는 ARM타겟보드와 호스트 사이의 입출력을 제공하는 Semihosting이라는 I/O제어기능을 지원합니다.
Semihosting 기능은 Cortex Core에서 BKPT 0xAB명령어를 실행하여 사용할 수 있습니다.
(Thumb상태의 Cortex Core인 경우 BKPT, ARM상태 또는 그 외 Core인 경우 SVC명령어가 사용됩니다.)
BKPT명령어는 프로세서를 디버그 상태로 만드는 명령어로 BKPT 0xAB명령을 받은 호스트는 Semihosting요청임을 확인하여 Core와 I/O제어를 위한 기능을 실행합니다.
개발환경에서 Semihosting을 사용하도록 설정하고 printf로 문자열을 출력할 경우 library는 Semihosting을 사용하도록 bkpt또는 svc명령어를 호출합니다.
IAR EWARM에서 Semihosting 사용
IAR EWARM은 Semihosting을 사용할 수 있는 기능을 제공하고 있습니다.
Project Option에서 semihosting을 통해 표준 입/출력이 이루어지도록 설정합니다.
printf문을 사용하여 문자열을 출력합니다.
디버깅 화면에서 View->Terminal I/O를 사용하여 출력을 확인합니다.
STM32에서 semihosting은 가장 간단히 문자열을 확인할 수 있는 기능입니다.
다만 디버거의 breakpoint기능을 사용하기 때문에 속도가 굉장히 느리다는 단점이 있습니다.