Zdravím vývojáře.
Chci se zeptat, zda někdo nevíte, jak se přesměruje funkce fprintf (AVR Studio) na LCD displej. Nejde mně o samotný kod funkce, která již obsluhuje konkrétní piny procesoru (tu si samozřejmě napíšu), ale potřeboval bych zjistit, kterou funkci funkce fprintf (případně makro printf) automaticky volá (do té pak zapíšu svůj kód), případně jako knihovnu musím do C vložit. Googlil jsem, nějaký zdroják jsem i našel, ale moc nepochopil.
Díky za odpědi, Karel.
Přesměrování funkce printf
Moderátor: Moderátoři
Zkus toto
Kód: Vybrat vše
#include <avr/io.h>
#include <stdio.h>
#include <util/delay.h>
#include "lcd.h"
int outlcd(char c, FILE *stream)
{
lcd_putc(c); //funkce z lcd.h pro zápis jednoho znaku
return 0;
}
FILE mystdout = FDEV_SETUP_STREAM(outlcd, NULL, _FDEV_SETUP_WRITE);
char c;
int main(void)
{
lcd_init();
stdout = &mystdout;
printf("Hello World!!");
_delay_ms(1000);
c='A';
while(1)
{
lcd_clr();
printf("%c",c);
c++;
_delay_ms(500);
}
}
Díky za odpovědi, pro AB1, tento kod jsem našel, ale když to porovnám, byly tam chyby. Chci se zeptat, věděl byste popsat, co znamená
FILE mystdout = FDEV_SETUP_STREAM(outlcd, NULL, _FDEV_SETUP_WRITE); ?
Ještě pár "otravných" otázek, nemám rád, když jen mechanicky opisuji kód a nevím, co to vlastrně dělá. Omlouvám se, tohle je pro mne nové:-)
1.
Pochopil jsem tedy správně, že printf() zavolá outlcd(), v té se volá lcd_putc() a do této funkce napíšu svůj zdroják pro ovládání pinů LCD?
2.
Funkce outlcd je tedy uživatelsky definovaná, není součástí knihovny stdio?
FILE mystdout = FDEV_SETUP_STREAM(outlcd, NULL, _FDEV_SETUP_WRITE); ?
Ještě pár "otravných" otázek, nemám rád, když jen mechanicky opisuji kód a nevím, co to vlastrně dělá. Omlouvám se, tohle je pro mne nové:-)
1.
Pochopil jsem tedy správně, že printf() zavolá outlcd(), v té se volá lcd_putc() a do této funkce napíšu svůj zdroják pro ovládání pinů LCD?
2.
Funkce outlcd je tedy uživatelsky definovaná, není součástí knihovny stdio?
Kód: Vybrat vše
FILE mystdout = FDEV_SETUP_STREAM (put, get, rwflag);
put - funkce pro zápis jednoho znaku
get - funkce pro čtení jednoho znaku (nepoužijeme, píšeme NULL)
rwflag - určuje zápis/čtení
Funkce printf() zapisuje do streamu stdout.
Proto přesměrujeme náš stream do stdout.
stdout = &mystdout
Možná to není přesný popis, do detailu jsem se tím nezabýval.
Pro praxi stačí vytvořit funkci put() pro zápis jednoho znaku do Lcd, uart, nebo třeba SPI.
Zbytek zůstává stejný.
http://nongnu.org/avr-libc/user-manual/ ... 271b7227fb
http://cs.wikipedia.org/wiki/Standardn%C3%AD_proudy
V outlcd() nemusí být žádná další funkce. Může tam být přímo kód pro odeslání znaku.Pochopil jsem tedy správně, že printf() zavolá outlcd(), v té se volá lcd_putc() a do této funkce napíšu svůj zdroják pro ovládání pinů LCD?