티스토리 뷰

입문

UART - sprintf, my_printf

Just4Fun 2016. 4. 3. 17:51

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로 출력하는것이 가능하다는 것을 알게 되었다.



main.c


입문 과정 목차

'입문' 카테고리의 다른 글

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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함