티스토리 뷰
UART를 이용하여 AVR에서 만든 문자열이 컴퓨터의 터미널에서 보여지는것을 확인하였다.
이번글에서는 I/O 레지스터에 있는 현재 값이나, 변수에 현재 어떤값이 있는지 알아보기 위하여 데이터를 문자열로 변환한 후 UART를 통하여 내 보내는 방법에 대해서 설명하도록 하겠다.
printf()함수를 사용하면 좋은데 지금 당장은 사용할 수 없으므로 다른 방법을 이용하여 printf()를 대신하여야 한다. 가장 쉽게 사용할 수 있는 것이 sprintf()이다.
printf() 함수는 인자로 들어오는 값을 stdout으로 내보내는 동작을 하고, sprintf에는 인자로 제공하는 char형 배열에 값을 변환하여 넣어주는 기능을 한다. 따라서 sprintf를 수행한 후 배열에 저장된 문자열을 uart_puts()를 이용하여 컴퓨터로 내 보면 될것 같다.
sprintf() 함수를 사용하기 위하여 <stdio.h> 파일을 include 하여야 한다.
위와 같이 코드를 작성하여 어떤 결과가 나오는지 확인해 보자.
위의 그림에서 보는바와 같이 loop() 함수에서 정의한 loop_count값이 1씩 증가되는 것을 확인할 수 있다.
이제 sprintf()함수를 이용하면 데이터 값을 문자열로 변환하여 출력할 수 있다는 것을 알게 되었다. 그러나 이런식으로 sprintf()를 사용하는것은 좀 불편한 감이 있다. sprintf()를 사용할 때마다 문자형 배열을 선언해 주어야 하는 것이다.
이 부분을 다른 방법으로 개선해 보도록 하겠다.
printf()와 sprintf()를 하나의 함수로 합치면 어느 정도 사용할 만한 수준이 될것 같다. 따라서 다음과 같은 코드를 만들어 제대로 동작 되는지 확인해 보도록 한다.
my_printf()라는 함수를 만들었다. 함수로 들어오는 인자의 개수가 가변적이므로 "..."을 사용하였다. 이렇게 가변 인자를 처리하기 위해서는 <stdarg.h>를 include하여야 한다. 사용하는 방법은 코드에 보이는것처럼 한다.
loop() 함수도 sprintf() 부분을 my_printf()로 변경하여 다시 한번 컴파일하고, 보드에서 실행 시켜 본다. 역시 동일한 결과를 확인할 수 있을 것이다.
sprintf()를 사용하는것에 비해 my_printf()를 사용하면 훨씬 편리하게 데이터를 문자로 변환하여 UART로 출력하는것이 가능하다는 것을 알게 되었다.
'입문' 카테고리의 다른 글
UART - "hello, world" (11) | 2016.04.03 |
---|---|
UART - stdio (1) | 2016.04.03 |
UART - 수신 (0) | 2016.04.03 |
UART - 송신 (6) | 2016.04.01 |
UART - 원리와 연결 (2) | 2016.03.29 |