printf Stream verbeigen

Gast #1618216
Hi,


ich schreibe auf die Serielle Schnittstelle mit etwa diesem Code. Läuft 
auch alles soweit. Nun tue ich einen weiteren Header dazu (und 
kompiliere natürlich auch ein weiteres c-File mit) und printf geht nicht 
mehr. 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Die_Nutzung_von_sprintf_und_printf

Gibt es bei der Verbiegung der Standartausgabe noch etwas zu beachten? 
Ändern tue ich diese eigentlich nicht. Der uart läuft zudem noch.
1
int uart_write(char c){
2
    while( !(UCSRA & (1 << UDRE)) );
3
    UDR = c;
4
    return 0;
5
}

mit diesem Code kann ich ganz normal weiter rausschreiben. Da das 
allerdings größere formatierte Blöcke sein sollen, hilft mir das nicht 
so ganz.

Also. Gibt es irgendetwas, was ich npch evtl beachten sollte? Kann die 
printf noch irgendwie überschrieben werden?

In dem zusäzlichen c-File wird noch die string.h eingebunden.

Gruß
Gast #1619082
Gut, habe nun, den Controller ausgetauscht, da ich eigentlich eh den 
mega644 verwenden will. Folgendes ist dasProgramm:
1
#include <avr/io.h>
2
#include <stdio.h>
3

4
int uart_putchar( char c, FILE *stream ){
5
  if( c == '\n' ) uart_putchar( '\r', stream );
6
  while ( !( UCSR0A & (1<<UDRE0)) );
7
  UDR0 = c;
8
  return 0;
9
}
10

11
void uart_init(uint16_t baud){
12
  UBRR0H = (unsigned char) (baud >> 8);
13
  UBRR0L = (unsigned char) (baud & 0xff);
14
  UCSR0B = (1 << RXEN0) | (1 << TXEN0);
15
  UCSR0C |= (1 << UCSZ01)|(1 << UCSZ00);
16
}
17

18
int uart_write(char c){
19
    while( !(UCSR0A & (1 << UDRE0)) );
20
    UDR0 = c;
21
    return 0;
22
}
23

24
#define BAUD 103
25

26
//Standardausgabe nach uart_putchar verbiegen
27
static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar,NULL,_FDEV_SETUP_WRITE);
28

29
int main(void){
30
  stdout = (FILE *) &mystdout;
31
  uart_init(BAUD);
32
  printf("Initialisierung abgeschlossen \n");
33

34
  while(1){
35
              uart_write('a');
36
  }
37
  return 0;
38
}

und printf schreibt nun nichts. Also tippe ich mal, mache ich 
irgendetwas falsch. Die Frage ist nur was, da die Funktion uart_write am 
Ende fleißig mir viele a's schickt.

Gruß

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.