www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Keil uVision printf benutzen


Autor: ojeoje (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich benutze einen Assembler Treiber für die ausgabe auf ein 4x20 LCD. 
Alle Funktionen des Treibers funktionieren einwandfrei.
Nun habe ich die PUTCHAR funktion mit in das projekt eingebunden weil 
ich gerne printf benutzen möchte.
Compiler sagt: MAIN.C(163): error C208: '_printf': too many actual 
parameters

Hier sind die Funktionsdeklarationen des Treibers:

extern  init_display(void);
extern  clr_lcd(void);
extern  printchar(char);
extern  moveto(char,char);
extern  cursor_on(void);
extern  cursor_off(void);
extern  print_lcd(char code *);
extern  print_digit (unsigned char);

Diese Funktionieren.
Kann mir jemand sagen was ich tun muss damit printf funktioniert.

Autor: MeinerEiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erst mal auch schreiben, wie prinft aufgerufen wird... steht da 
nirgendwo

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktioniert's denn mit nur einem Parameter? Wenn der Compiler meint, 
dass da zu viele sind...

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
printf arbeitet über die putchar.
Wird keine putchar-Funktion in die Projektdateien aufgenommen, wird eine 
interne Funktion verwendet.
Die eigene putchar-Funktion muss die Steuerzeichen (Endeterminierung, 
etc.) passend auf das Display ummünzen.

Das heisst, die putchar-Funktion darf von deinen Treiber-Funktionen 
wissen, printf darf's nicht wissen (bzw. muss es nicht wissen).

Bzgl. der Fehlermeldung, zeig mal deine main.c.

Ralf

Autor: ojeoje (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahhhhhhh!!!

Es funzt!
stdio.h!!!

Sorry und Danke!!!

Autor: Random ... (thorstendb) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

das einfachste retargeting mit nur einem Ausgabekanal ist, eine eigene 
fputc zu schreiben.

Die fputc sieht dann z.B so aus:

int fputc(int c, FILE *f)
{
  if(c=='\n') lcd_putchar('\r');
  lcd_putchar(c & 0xff);

  return(c);
}


Willst du verschiedene Ausgabekanäle mittels FILE pointern (fopen, 
fprintf, ...) verwenden, müssen die _sys_open/close/read/write 
funktionen neu geschrieben und angepasst werden.
Such mal in den files des RTAgent von Keil.

VG,
/th.

Autor: Random ... (thorstendb) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
btw...
ich arbeite gerade an einem sehr komplexen retarget-system mit flexiblen 
ausgabekanälen.

Hat sich jemand von euch schon mal damit beschäftigt? Gibt es irgendwo 
verständliche "lektüre", wie die internas bei anderen aussehen, d.h. wie 
die infrastruktur ist von printf über fputc über _sys_write über .... ?

VG,
/th.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Random ... schrieb:
> ich arbeite gerade an einem sehr komplexen retarget-system mit flexiblen
> ausgabekanälen.

Das mit den FILE-Pointern ist mir zu umständlich.
Wenn ich auf verschiedene Geräte ausgeben muß (LCD, UART), dann nehme 
ich einfach sprintf().

In der Regel müssen ja die Ausgaben je nach Gerät völlig verschieden 
formatiert werden. D.h. man kann eh nie den gleichen String auf mehrere 
Geräte ausgeben.


Peter

Autor: Random ... (thorstendb) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> In der Regel müssen ja die Ausgaben je nach Gerät völlig verschieden
> formatiert werden. D.h. man kann eh nie den gleichen String auf mehrere
> Geräte ausgeben.



Nunja,

für User/Textausgaben kann man schon immer die gleichen Quelldaten 
nehmen. Man muss dann nur eine Terminalemulation mit in den 
devicetreiber einbauen.
So mach ichs.

Ich unterscheide halt nicht, ob ich ein (G)LCD, UARTx, ITM, USB oder ETH 
device habe :-) Das weiss der Treiber.

VG,
/th.

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.