Musste mit meinem C-Programm vom Keil auf den Tasking umsteigen. Trotz der geänderten Konfiguration im DAvE ist es mir bisher nicht möglich mittels printf eine Ausgabe auf meinem Diplay zu erzeugen. Woran kann das liegen? Gruß Steffen
Am Wetter? Hier regnet es gerade. Wenn Du glaubst, das wäre eine dumme Antwort, dann lies Dir Deine Frage nochmal genauer durch ... und sieh' Dir an, wieviele Randbedingungen (keine) Du erwähnt hast, wieviel Quelltext (keinen) Du gepostet hast ... und wie extrem ausführlich Deine Fehlerbeschreibung ausfällt "ist es mir bisher nicht möglich ..." Was für ein Display, was für ein Controller, exakt was für ein C-Compiler, wie sieht das Fehlerbild aus, warum überhaupt musstest Du "vom Keil auf den Tasking umsteigen"?
Als Controller benutze ich den 80C167CR von Infineon. Für Testzwecke habe ich momentan noch keinen Quellcode eingefügt außer eine while (1) schleife und anschließend printf("hallo\n"); Fehlermeldungen bekomme ich beim compilieren gar keine angezeigt. Tatsache ist nur das sowohl das Fensters des Bootloaders nach der Übertragung des Programms als auch das Display (EAKIT120-5 Firma Electronic Assembly)schwarz bleibt. Bei der benutzung des Keil Compilers funktioniert das Programm einwandfrei. Die <stdio.h> habe ich zwar eingefügt, bin mir aber nicht im klaren ob der Compiler (Tasking EDE Version 8.0) überhaupt auf ihn zugreift. Der umstieg vom Keil auf den Tasking beruht auf die Codebegrenzung von 8k beim Keil.
Woher soll der Compiler wissen, daß die Ausgabe von printf() auf einem angeschlossenen Display zu landen hat? Was sagt denn die Dokumentation des Compilers dazu? Vielleicht wird's ja auf eine serielle Schnittstelle ausgegeben oder landet schlichtweg im Nirvana.
Die Ausgabe soll ja über die serielle Schnittstelle erfolgen. In der Doku hab ich leider bisher nichts dazu gefunden.
Hallo Steffen, es ist schwer eine exakte Hilfe zu geben, da viele Randbedingungen nicht bekannt sind! Vorgehensweise: 1. Ist das Projekt richtig definiert (Prozessor, Speicheraufteilung (RAM, ROM-Bereich, BUS, CS, Takt, Watchdog...) 2. Wird die Hartdware richtig konfiguriert (Ports, Input-Output, RS232...) 3. Zuerst einmal nur ein Programm schreiben, das einen Port setzt, und den Port dann mit einem Multimeter testen (5V). 4. Wenn das nicht funktioniert --> Punkt 1-3 überprüfen. 5. Meiner Kenntnis nach, muss printf erst definiert werden. Ich gehe davon aus, dass du nicht mal bis zu main() kommst. Wenn du nicht weiterkommst, dann sende mir den Compiler mit Freischaltcode einfach zu - ich erledige dann das für dich ;-) Gruß MyMeisle
Also Ein- und Ausgänge schalten funktioniert einwandfrei (zumindest lassen sich über einen Schalter Lämpchen ein und auschalten). Im Prinzip läuft das Programm Fehlerfrei. Es ist nicht so das er bei der printf Anweisung hängen bleibt oder abstürzt, er bringt mir halt nur keine Zeichen aufs Terminal bzw. Display. Wie muss man printf definieren? Gruß Steffen
Hallo Steffen, meine Antwort bezüglich printf war falsch! Printf ist implementiert, aber printf benutzt als Schnittstelle die Funktion _iowrite, die implementiert (definiert) werden muss. Siehe Doku Tasking. _iowrite #include <stdio.h> int _iowrite( FILE *fp, int c ); Low level output function. The delivered library contains an 'empty' function. To perform real world I/O, this function must be customized by the user. _iowrite is used by all output functions (printf, putc, puts, etc.). See the file serio.c in the examples io directory demonstrating a serial I/O implementation of this low level output function. Copyright © 2001 TASKING, Inc. Gruß MyMeisle
Ich bin echt gespannt ob dieser Thread zu printf endlich mal zu einem verwertbaren Ergebnis führt. Nach Gott weiß wie vielen Printf - Threads in diesem forum und Suche in zig C-Büchern habe ich noch immer keinen Plan, wie ich mit Printf etwas an mein Display schicke und vor allem, woher printf weiß, das es nun ans Display gehen soll oder an die Serielle Schnittstelle ...
MyMeisle hat den wesentlichen Punkt doch zitiert; wo liegt also das Problem? Mit Deiner Implementierung von _iowrite entscheidest Du, wo die Ausgaben von printf() und Konsorten landen - ein Beispiel für die serielle Schnittstelle existiert ja offensichtlich auch. Kann hier niemand englisch?
@Rufus Verstehe! Es funktioniert aber nicht wenn ich schreibe: _iowrit = "liebe Iowrit! Wenn ich was mit Fprint angebe, dann sollst Du wissen dass es als Serielle Datenausgabe auf meinem port C1 gedacht ist und manchaml auch als serieller Datenstrom für die Serielle Schnitstelle. Na das siehst Du dann ja schon " oder hätte ich es in englisch schreiben müssen?? _iowrite = "my beloved I Owrite! ...
Es ist der Versuch Dir zu sagen dass Dinge, die für Dich ganz normal sind, für andere nicht normal sind. Überleg mal! Du gehst zum Arzt und der sagt Dir: Ihre unpäßlichkeit ist auf einen akute incensio am solarus plexus zurückzuführen. Gehen Sie in die Apotheke und hole sie sich ein Medikament.
Dann zitiere ich mal das Zitat von Mymeisle: "See the file serio.c in the examples io directory demonstrating a serial I/O implementation of this low level output function." und übersetze es sinngemäß für Dich: Im Lieferumfang des Compilers ist eine Beispieldatei namens serio.c enthalten, in der eine Implementierung der Funktion _iowrite enthalten ist, die Zeichen auf die serielle Schnittstelle ausgibt. Diese Datei befindet sich im Verzeichnis "examples" oder eventuell in einem Unterverzeichnis davon, das "io" heisst. Um nun statt der seriellen Schnittstelle Dein LC-Display anzusteuern, wirst Du diese Datei als Grundgerüst verwenden können (Aufrufkonventionen etc.), aber natürlich statt der seriellen Schnittstelle Dein Display ansteuern müssen. Wie das zu erfolgen hat, hängt von der Art des Anschlusses des Displays an den Controller und nicht zu letzt vom Display selber ab.
Es wurde doch schon alles erwähnt: 1. Doku lesen! 2. Beispiel lesen! Mit anderen Worten: Gehe in die Apotheke, hole Dir ein Medikament und verwende es nach den Anweisungen der Packungsbeilage!
@ OldBug ... und behandle Deine Magenentzündung mit einer Salbe gegen Fußpilz! Super! Mir scheint, dass es mir nicht wirklich gelingen will, das ursächliche Problem verständlich darzulegen. Was solls. Es geht ja auch ohne printf().
Wenn Du das machst, hast Du die Packungsbeilage nicht gelesen ;) SCNR
"Mir scheint, dass es mir nicht wirklich gelingen will, das ursächliche Problem verständlich darzulegen. Was solls. Es geht ja auch ohne printf()." Verstehe ich Dich richtig - mit selbstgeschriebenen Funktionen kannst Du Zeichen auf Dein LC-Display ausgeben? Dann sollte es Dir doch möglich sein, das Beispiel serio.c dahingehend anzupassen, daß eben das mit der Funktion _iowrite geschieht. Zu Debugzwecken kannst Du ja auch parallel weiterhin Zeichen auf die serielle Schnittstelle ausgeben, dann siehst Du, ob _iowrite überhaupt aufgerufen wird. Wenn auch das für Dich böhmische Dörfer sind, dann versuch' doch noch mal, Dein Problem darzustellen.
@OldBug !Nein! Du weißt nicht WAS du WIE behandeln mußt! Ich habe keine Datei namens serio.c in der ich ein Beispiel für die Programmierung hätte und ich habe kein Buch das einen Syntax dafür liefern würde und ich habe keine Datei die "iowrite" enthält, oder zumindest finde ich nichts davon! zurück zum Beispiel. Schön das Du ne Packungsbeilage und eine Salbe hast. Sie passt aber nicht zur Krankheit! Und weil Du kein Mediziener bist wirst Du das nie rausbekommen. Alles was Du haben wirst is ne chronische Magenentzündung und nie wieder Fußpilz!
Exakt welchen C-Compiler verwendest Du bitte? Ist der vollständig und korrekt installiert? Hersteller, Versionsbezeichnung etc.
Hallo tex, was Rufus meint ist folgendes: Wenn jemand mir sagt (schreibt): " Ihre Unpäßlichkeit ist auf einen akute incensio am solarus plexus zurückzuführen. Gehen Sie in die Apotheke und hole sie sich ein Medikament." Dann versuche ich herauszufinden was eine "incensio am solarus plexus" bedeutet. Das kann ich erreichen indem ich selber versuche an die Informationen zu kommen (= Arbeit) oder erwarte, dass andere alles für mich erledigen (= modernes Management). (Incensio: Entzündung, entzünden Solarus Plexus: Oberbauch, Dreieck unter deinem Brustbein, wo Dein Magen anfängt ) Rufus meint nun, dass du alle notwendigen Informationen bekommen hast, und nun selber erstmal weiterversuchen (arbeiten) sollst. Es ist nicht mehr umbedingt notwendig den Arzt wieder zu besuchen. Entweder du informierst dich über Medikamente, die eine Oberbauch Entzündung bekämpfen, oder du fragst den Apotheker. Das ganze hat nur ein Problem, wahrscheinlich ist das Medikament verschreibungspflichtig - also doch wieder zum Arzt, und die Krankenkasse muss wieder mehr bezahlen.. Nichts für Ungut - tex, Steffen - habe euch gerne geholfen. MyMeisle
" Verstehe ich Dich richtig - mit selbstgeschriebenen Funktionen kannst Du Zeichen auf Dein LC-Display ausgeben? " Solange nichts mit Variablen oder Formatierung dabei ist ja, sonst kommt atoi dazu und dann oft viel Mist bei raus. "_Exakt_ welchen C-Compiler verwendest Du bitte? Ist der vollständig und korrekt installiert? Hersteller, Versionsbezeichnung etc. " avr-gcc (GCC) 3.4.1 Copyright (C) 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Ich hoffe mal das ist ein Teil der Information. Was die korrekte oder vollständge Installation betrifft würde ich sagen ja, aber da gehts mir dann wieder wie mit der Packungsbeilage.
@MyMeisel Du darfst Dir Dein Medikament gegen Magenentzündung gerne im häuslichen Chemielabor selbst destilieren, wenn Dich Dein Apotheker mit der Aussage "... ich mach hier nicht die Arbeit für Dich... " nach Hause schickt! Ich glaube wir verlieren hier den Zusammenhang und es führt mal wieder zu nix, also lass es Gut sein. Ich bin zu doof oder zu faul, wie Du willst und printf funktioniert mit dem was hier steht bei mir trotzdem nicht, also ist es Zeitverschwendung ohne Arbeitsergebnis für alle Beteiligten und so sinnvoll wie der Thread über 10k Widerstände
Bei Verwendung der avr-libc: http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html Ich hoffe, das Rezept ist gut genug ;)
Not Found The requested URL /avr-libc/user-manual/group_<u>_avr_</u>_stdio.html was not found on this server. Apache/1.3.26 Server at www.nongnu.org Port 80 ein Placebo-Präperat?
Hallo tex, "...und printf funktioniert mit dem was hier steht bei mir trotzdem nicht..." AVR_Controller != Infineon_Controller AVR_Compiler != Tasking_Compiler KEIL_C167_Compiler != TASKING_C167_Compiler Wenn du Probleme mit einem AVR-Compiler hast, dann ist ganz einfach dies hier der falsche Thread für dich! Zur Erinnerung ich schreibe über den Tasking Compiler für den Controller C167! Und dort gibt es die besagten Dateien! Ich denke, dass ich Steffen geholfen habe (Ursprung). MyMeisle
Hey tex! Nix Placebo, die links lassen sich offensichtlich nicht pasten. Bißchen drüber nachdenken, oder selber mal auf nongnu.org danach suchen, hab da jetzt auch keine Lust mehr zu...
@MyMeisle Nach einfügen der beiden Dateien serio.c und serio.h sowie einigen Abänderungen der Einstellungen klappt bei mir die printf Ausgabe auf mein Display jetzt fehlerfrei. Vielen Dank für deine Hilfe!!!! Gruß Steffen
@OldBug Keine Sorge, so schlau war ich auch ;-) Bin aber auch mit dem nicht einen Schritt weiter. Irgend etwas Elementares feht.
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.