티스토리 뷰
앞의 글에서 my_printf()를 이용하여 printf() 대신 사용할 수 있는 방법에 대해서 알아보았다. 그러나 실제 프로젝트를 진행하다 보면 이미 기존에 수행했던 코드를 참조하거나 인터넷에서 찾은 오픈소스를 재활용하게 되는 경우가 상당히 많은데, 그 안에 들어있는 printf() 함수를 모두 my_printf()함수로 대체 하여야 된다.
#define printf my_printf
물론 위와 같은 #define을 이용하면 간단히 대체할 수는 있다.
그러나 이번 글에서는 위와 같은 방법을 사용하여 printf를 사용하는 것이 아니라 진짜 printf를 사용하는 방법에 대해서 설명하도록 하겠다.
이미 앞에서도 한번 언급하였는데 printf() 함수는 stdout으로 데이터를 내 보내도록 되어 있다. 그렇다는 얘기는 stdout을 UART로 내 보내는 것으로만 해주면 printf를 사용할 수 있겠다는 생각이 든다.
printf()함수는 C library 함수이므로 libc 메뉴얼을 보면 stdout을 사용하는 방법이 나온다. 자세한 내용은 "avr-libc user manual"을 참고하기 바란다.
21번 라인에 있는 "FDEV_SETUP_STREAM"을 이용하여 stdout으로 사용하는 uart_tx함수와 stdin으로 사용하는 uart_rx 함수를 등록하면 된다.
loop() 함수에 이전에 사용했던 my_printf() 함수 대신에 printf()로 변경하고 사용자의 입력을 받기 위한 scanf() 함수를 사용하였다. 이렇게 코드를 수정한 다음 실제 보드에서 어떻게 동작하는지 확인해 보자.
일반적으로 사용하는 C프로그램에서의 printf와 scanf와 동일하게 UART 터미널을 통해서 입력과 출력이 제대로 동작되는 것을 확인할 수 있을 것이다.
'입문' 카테고리의 다른 글
UART 온도계 (0) | 2016.04.03 |
---|---|
UART - "hello, world" (11) | 2016.04.03 |
UART - sprintf, my_printf (0) | 2016.04.03 |
UART - 수신 (0) | 2016.04.03 |
UART - 송신 (6) | 2016.04.01 |