mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik printf Ausgabe beim Tasking V8.0


Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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"?

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Ausgabe soll ja über die serielle Schnittstelle erfolgen.
In der Doku hab ich leider bisher nichts dazu gefunden.

Autor: MyMeisle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: MyMeisle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ...

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Norbert aus E. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Köstlich und Lehrreich zugleich!

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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! ...

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist das Satire?

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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().

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du das machst, hast Du die Packungsbeilage nicht gelesen ;)

SCNR

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"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.

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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!

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Exakt welchen C-Compiler verwendest Du bitte? Ist der vollständig und
korrekt installiert?

Hersteller, Versionsbezeichnung etc.

Autor: MyMeisle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
" 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.

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei Verwendung der avr-libc:

http://www.nongnu.org/avr-libc/user-manual/group__...

Ich hoffe, das Rezept ist gut genug ;)

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: MyMeisle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@OldBug
Keine Sorge, so schlau war ich auch ;-)
Bin aber auch mit dem nicht einen Schritt weiter. Irgend etwas
Elementares feht.

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Brille?

scnr

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.