AVR32 printf umleiten stdout

OP #1748966
Lesenswert?

Hallo,

ich verwende einen AVR32 und möchte gerne printf über usart 0 nutzen.
Leider kann ich die Funktionen aus der newlib ad on nicht nehmen.
Dies ist so da ich externes SDRAM habe und ich beim Linker sagen muss
-nostartfiles. Somit ist schonmal die normale crt0.S nicht dabei.
Ich nehme nämlich eine angepasste von Atmel aus dem Beispiel
damit das externe SDRAM als HEap verwendet werden kann.
Jetzt ist es nur dumm das printf nicht mehr über usart0 geht.

Wie wird das nun manuell gemacht die stdout von printf umzuleiten.
Irgendwie gibt es keine konkrete Antwort im Netz, oder ich verstehe es 
einfach nicht.
#1750319
Lesenswert?

Wie schon gesagt: eine variadische Funktion

<aus dem Gedächtnis zusammenkram>
1
#include <stdio.h>
2
#include <stdarg.h>
3

4

5
void my_printf( const char* fmt, ... )
6
{
7
  char buffer[80];
8

9
  va_list args;
10
  va_start( args, fmt );
11
  vsprintf( buffer, fmt, args );
12
  va_end( args );
13

14
  uart_puts( buffer );
15
}

Allerdings solltest du noch mal die Doku zu deiner Lib studieren. Da 
gibt es mit Sicherheit eine Möglichkeit, wie du dem normalen printf eine 
Ausgabefuktion für ein einzelnes Zeichen unterjubeln kannst.
OP #1750336
Lesenswert?

Karl heinz Buchegger schrieb:
> Allerdings solltest du noch mal die Doku zu deiner Lib studieren. Da
>
> gibt es mit Sicherheit eine Möglichkeit, wie du dem normalen printf eine
>
> Ausgabefuktion für ein einzelnes Zeichen unterjubeln kannst.

Ja klar gibt es dass. Atmel hat es ja auch im Framework gemacht.
Und es geht ja auch. Eben nur nicht wenn ich die neue crt0.S nehmen muss 
und nicht die Originale von der Gnu Toolchain 2.4.2 von Atmel.
Da ich aber SDRAM habe benötige ich eine eigene crt0.S
mit den asm Routinen um SDRAM zu initialisieren und die variablen die im 
SDRAM liegen zu initialisieren.

Ich habe mir auch schon öfters die Doku der newlib
angeschaut. Verstehe ich aber noch nicht ganz.
Ich muss mich damit mal genau beschäftigen.

Aber danke für deine Hilfe.
OP #1750382
Lesenswert?

Hi,

komisch ist nur das

 printf("1Hardware init done AVR32 is running.....\n\r");
 printf("2Hardware init done AVR32 is running.....\n");

 printf("3Hardware init done AVR32 is running.....\r\n");



 printf("4Hardware init done AVR32 is running.....");

die printf ausgaben mit vorne 1 und 4 gehen. Mit 2 und 3 nicht.
Des weiteren geht dadurch der automatische reset des AVR32 durch den 
Programmer AVR Dragon nicht mehr.

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