Forum: Mikrocontroller und Digitale Elektronik printf Stream verbeigen


von Hans (Gast)


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ß

von Hans (Gast)


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ß

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
Noch kein Account? Hier anmelden.