GCC i printf

Jul 28, 2004 14 Replies

Witam



Mam pytanie: jak podpiac printf do seriala w GCC? Potrafie wyslac na seriala dowolny string za pomoca swojej funkcji _print(&COM,"ALA ma kota");. Lecz nie umiem przekierowac printf na serrial .Wiem ze to robi sie to chyba fdevopen(uart_putchar, NULL, 0); Lecz niestety nie dziala.



Prosze o wskazówki.



Pozdrawiam Mster


Zainicjowales UART?? Predkosc, z przerwaniami lub bez, ile bitow transmisji???

Przeciez napisa³em:

Pozdrawiam WP

a zrob tak: fclose(stdout); stdout = 0; uartInit(); // initialize uart fdevopen (uart_putchar, NULL, 0);

P.S. Uzywasz stdio do LCD?

tak zawsze robi³em pod winavr i zawsze by³o ok. Teraz robiê w czystym GCC pod 68k i mam komunikat o niezdefiniowanej referencji do fdevopen. :(

Pozdrawiam Mister

Wed, 28 Jul 2004 15:39:23 +0200, na pl.misc.elektronika, Mister napisał(a):

Czy przypadkiem fdevopen to nie jest 'wynalazek' specjalnie pod avr ?

[..] The standard streams stdin, stdout, and stderr are provided, but contrary to the C standard, since avr-libc has no knowledge about applicable devices, these streams are not already pre-initialized at application startup. Also, since there is no notion of "file" whatsoever to avr-libc, there is no function fopen() that could be used to associate a stream to some device. (See note 1.) Instead, the function fdevopen() is provided to associate a stream to a device, where the device needs to provide a function to send a character, to receive a character, or both. [..]

Dlatego pozostaje nadal pytanie otwarte:

Jak skojarzyæ printf i uarta tak aby dane sz³y na uarta? -:)

Mister

Mister napisal(a):

Ja tam bym sie nie chrzanil, tylko uzyl sprintfa ;--).

Mister <wojpie@wywal_to.poczta.onet.pl> napisał:

To czego szukasz nazywa sie freopen - cytat z mana: Funkcja freopen otwiera plik, którego nazwę wskazuje path i związuje z nim strumień wskazywany przez stream. Strumień ten jest zamykany (jeśli istnieje). Atrybut mode ma takie samo znaczenie jak w przypadku funkcji fopen. Głównym zastosowaniem funkcji freopen jest zamiana pliku związanego ze standartowymi strumieniem tekstowym (stderr, stdin lub stdout). GRG

Mo¿esz co¶ wiêcej na ten temat napisaæ? Albo wskazaæ linka na ca³ego manuala?

Mister

Mister snipped-for-privacy@poczta.onet.pl> napisał:

:)))) "man freopen" jesli masz linuksa :). Lub google "freopen" - na pewno cos znajdzie. Na przyszlosc - man nazwa_funkcji bedzie pomocne przypadku 99% funkcji z biblioteki standardowej. GRG

Mozesz powiedziec jaka sciezka (path) wskazuje na port szeregowy?

Krzysiek Rudnik

ekhm sorry - albo mi sie zdaje albo mowa o jakims uP 68k nie wiem czy kolega uzywa GCC z biblioteka przeznaczona do tego procesora, czy zwyklego linuxowego portu dla 68k

jesli to pierwsze, to mozliwe ze w libc jest zdefiniowane cos takiego jak fdevopem z avr-gcc w libc dla avrow jest przerobiony caly stdio jesli uzywa zwyklego GCC, to wszystkie f-ki do niczego sie nie nadaja, bo sa stworzone do wspolpracy z systemem operacyjnym

ja bym proponowal nadpisac w programie standardowa funkcje putc wlasna ktora wysyla na UARTa znaki, a potem uzywac printf - tylko nie daje glowy czy printf nie korzysta z fputc i czy gcc w ogole pozwoli na cos takiego i nie bedzie warczal... nigdy tego nie robilem na uP, bo procedury pokroju printf zajmuja ladnych kilka KB ;]

A jakiej używasz bibliteki standartowej? Newlib? Jeśli tak, to chyba musisz zaimplementować funkcję outbyte (oraz ewentualnie inbyte - do czytania) i zlinkować ją z Twoim softem. AFAIR w źródłach newlib są przykładawe implementacje dla jakiejś kości z rodziny m68k.

BTW. To nie jest problem kompilatora tylko biblioteki standartowej - wbrew pozorom to są dwie różne rzeczy.

Regards, /J.D.

próbowa³em z putc, outbyte ale bez efektu...

chyba zostanê przy sprintf.

Pozdrawiam Mister

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required