J 창고

[Atmega128] AVR Studio6 에서 printf, sprintf 사용법 (UART, LCD) 본문

컴퓨터/Firmware

[Atmega128] AVR Studio6 에서 printf, sprintf 사용법 (UART, LCD)

JSFamily 2015. 1. 9. 11:16



AVR Studio6 에서 


UART나 LCD를 사용하는데 함수를 다 작성해야하는 귀찮은 점이 있는데

(codevision은 다 있어서 편했는데 ㅠㅠ)


이걸 printf나 sprintf 로 연결할 수 있는 방법이 있다




일단 sprintf를 사용하기 위해선




프로젝트 속성 -> Toolchain -> AVR/GNU Linker -> Libraries 에서


libprintf_fit 을 추가해 준다.





그리고


프로젝트 속성 -> Toolchain -> AVR/GNU Linker -> General 에서


Link Statically (-Wl, -static)과 

Use vprintf library (-Wl, -u, vfprintf)


를 체크해 준다.





그 후에 sprintf를 사용하면 float 까지 잘 나오는 모습을 확인할 수 있다..





그리고 UART 또는 CLCD를 사용하는데 매번 함수 짜기도 귀찮고 


printf의 막강한 성능을 구현하고 싶다면

(근데 실제로 printf는 그닥 좋은 함수가 아니라는 얘기가..)


http://cafe.naver.com/carroty/44434


여기에 설명되어 있다.




1
2
3
4
5
FILE *fpStdio;
FILE *fpLCD;
 
fpStdio = fdevopen(putChar1, getChar1);
fpLCD = fdevopen(LCD_data, NULL);
cs



일단 main문 안에 이런식으로 선언 후



1
2
fprintf(fpStdio, "hahahahahahahaha%f\n",pi);
fprintf(fpLCD, "%f", pi);
cs


이런식으로 필요한 곳에 사용하면 된다.


기존에 잘 알려져 있는 printf 사용 방법보다 이 방법이 좀 더 사용하기 편해 보인다 생각해서


이 방법을 선택했음.



다만 UART 통신에 사용하는거엔 문제가 없는데


CLCD에 사용함에 있어 약간의 문제가 있다


LCD_data라는 함수는 LCD_string 이란 함수에 연결되어 있는 문자 하나만 보내는 함수인데


'\n' 이라던가 LCD Clear가 안되는 등의 문제점이 있다.











Comments