Hallo, ich möchte eine formatierte Ausgabe mit einen PIC µC auf einen LCD anzeigen. also genauso wie auf der AVR-GCC-Tutorial "Die Nutzung von sprintf und printf" http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Die_Nutzung_von_sprintf_und_printf. die sprintf() hat super funktioniert. ich muss aber genau die printf() verwenden. bei der wurde die FDEV_SETUP_STREAM() aus der avr-libc Bibliothek benutzt, die ich leider bei mir nicht umsetzen könnte. wie kann ich die printf() mit dem PIC µC benutzen? kann mir Jemand helfen bitte? Mit freundlichen Grüßen Josef M.
Josef M. schrieb: > die sprintf() hat super funktioniert. ich muss aber genau die printf() > verwenden. Warum musst du? Was du brauchst ist im einfachsten Fall eine Funktion, die einen String auf dein LCD ausgeben kann. Das kann printf sein, muss es aber nicht. > wie kann ich die printf() mit dem PIC µC benutzen? Da musst du in die Doku deines Compilers schauen, wie man die Runtime-Library davon überzeugt, auf ein bestimmtes Gerät auszugeben. Standard-C hat dazu nichts zu sagen. Wenn die Runtime-Library nicht schon auf deine Hardware angepasst ist, wirst du einen 'Treiber' schreiben müssen, der ein einzelnes Zeichen ausgeben kann (meistens reicht das schon). Wie dieser Treiber konkret aussieht und wie der in die Runtime eingebunden wird, so dass er von printf benutzt werden kann, ist komplett von deiner Hardware bzw von deinem Compilersystem abhängig.
Hallo Karl, vielen Dank für deine schnelle Antwort. ich programmiere einen PIC24F Mikrocontroller und verwende das MPLAB v8.60 compiler. ich habe schon lange nach einer Lösung umgeblätert bevor ich der Beitrag im Forum eingetragen habe. leider nichts gefunden. >> die sprintf() hat super funktioniert. ich muss aber genau die printf() >> verwenden. > > Warum musst du? wenn es mit dem printf() nicht funktionieren kann oder kompliziert zu lösen ist dann verwende ich einfach die sprintf().
Josef M. schrieb: > wenn es mit dem printf() nicht funktionieren kann... Mein lieber Josef, wenn ich deine Beiträge hier lese, wird mir sehr melancholisch zumute. Warum können die jungen Leute heutzutage es nicht fertig bringen, sich auf das einzustellen, was sie zu beackern versuchen? Selbst für die Programmierung auf dem PC finde ich solche Funktionen wie printf() und Konsorten nicht gut, setzen sie doch für jede kleine Ausgabe einen in der Laufzeitlib eingebauten Textinterpreter voraus, der den Formatstring interpretiert. Und das, obwohl der Programmierer schon vor dem Hinschreiben des Formatstrings gewußt hat, was er denn eigentlich für eine Konversion beabsichtigt. Da sind mir beispielsweise die Funktionen IntToStr und IntToHex aus der Windowswelt viel lieber, weil einfach direkter, schneller, geradliniger. Und nun versuchst du auf einem kleinen Mikrocontroller genau den selben aufgeblähten Code zu benutzen, der eigentlich schon am PC nicht die allerbeste Wahl ist. Ich hab mir für andere (32 Bit) uC's meine eigene Konvertier-Lib zusammengestellt, wo ich sowas wie IntToStr und Dezi_OUT, FloatToStr und Float_Out, HexByte_Out bis HexLong_Out und so weiter als einzelne Funktionen drin habe. Da hat dann auch noch den Vorteil, daß der Linker (wenn er schlau genug ist) die nicht benötigten Teile einfach weglassen kann. Bei printf geht das nicht, wei der Linker niemals alle eventuell auftretenden Formatstrings erfassen und analysieren kann. Naja und für PIC's (allerdings die 16Fxxx) hab ich meine Gleitkommalib nebst I/O in Assembler. Also: laß lieber alle solchen SUPERTOLLEN Funktionen wie printf und scanf aus den PC-Gefilden besser weg und schreib dir einen Grundstock an Konvertierungsroutinen, die einfach besser zu einem uC passen. Du wirst dir selber eines Tages dafür dankbar sein. W.S.
@W.S. Es hat sich seit den 1980-ern bei den MCs etwas getan. Sie sind in der Regel leistungsstark genug, um für den langsamen Menschen ein paar popelige printf auszuführen. Auch sind die C-Compiler entsprechend optimiert. Ich hab selbst mal auf nem AT89C2051 aus "Faulheit" float verwendet (belegt etwa 1kB Flash). Wenn es also keine konkreten Gründe gibt, auf float oder printf zu verzichten, muß man es auch nicht. Peter
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.