mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik printf Stream verbeigen


Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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-Tu...

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

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ß

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut, habe nun, den Controller ausgetauscht, da ich eigentlich eh den 
mega644 verwenden will. Folgendes ist dasProgramm:
#include <avr/io.h>
#include <stdio.h>

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

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

int uart_write(char c){
    while( !(UCSR0A & (1 << UDRE0)) );
    UDR0 = c;
    return 0;
}

#define BAUD 103

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

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

  while(1){
              uart_write('a');
  }
  return 0;
}

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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.