printf Stream verbeigen

Gast #1618216
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-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
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren