Hallo zusammen, ich programmiere einen ATmega16 und will folgendes tun: Ich will meiner stdio sagen das sie den Text den ich an printf() uebergebe an die Serielle Schnittstelle senden soll. Ich habe jedoch keine Ahnung wie ich das implementieren soll. Ich habe bereits einiges mit dem ATmega16 gemacht.. kenne mich mit den Eigenschaften des Controllers recht gut aus. Jedoch weiß ich nicht wie ich das umsetzten soll.. kann mir da jemand helfen?
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html Da ist Beispielcode dabei. Zur Verfügung stellen musst Du nur eine Routine, die ein Zeichen ausgibt (und eine, die eines einliest, falls Du die umgekehrte Richtung auch benötigst).
Hallo, ich kann den richtigen Beispielcode irgendwie nicht finden.. könntest du einen vielleicht hierein quoten?.. Wäre super.. Danke schonma im Voraus!
Na ja ... er ist kurz, also:
1 | #include <stdio.h> |
2 | |
3 | static int uart_putchar(char c, FILE *stream); |
4 | |
5 | static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL, |
6 | _FDEV_SETUP_WRITE); |
7 | |
8 | static int |
9 | uart_putchar(char c, FILE *stream) |
10 | {
|
11 | |
12 | if (c == '\n') |
13 | uart_putchar('\r', stream); |
14 | loop_until_bit_is_set(UCSRA, UDRE); |
15 | UDR = c; |
16 | return 0; |
17 | }
|
18 | |
19 | int
|
20 | main(void) |
21 | {
|
22 | init_uart(); |
23 | stdout = &mystdout; |
24 | printf("Hello, world!\n"); |
25 | |
26 | return 0; |
27 | }
|
Ein Programm, das bis auf init_uart() komplett ist und via printf() einen String am UART ausgibt. Natürlich muss Du die UART-Register auf Deinen µC anpassen.
Wie konnte ich das denn übersehen.. :) Ich probiers gleich mal aus :)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.