일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- M-Rokkor 40/2
- Kodak T-Max 100
- Minolta CLE
- ZeissIkon ZI
- G28/2.8
- Kodak Ektar 100
- fujifilm velvia 50
- Contax G2
- 2019 유럽여행
- cf80/2.8
- kodak t-max 400
- SONY A7
- Kodak 400TX
- cf50/4 fle
- Rollei35s
- FujiFilm GFX50s
- Minolta TC-1
- 2018 미국출장
- Mamiya 7
- GRD2
- FujiFilm C200
- N80/4
- cs50/2.5
- Germany
- Nikon 28Ti
- Leica M7
- Kentmere 400
- Hasselblad 500cm
- 4870
- Kodak 5222
- Today
- Total
J 창고
[Atmega128] AVR Studio6 에서 printf, sprintf 사용법 (UART, LCD) 본문
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가 안되는 등의 문제점이 있다.