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


von Steffen (Gast)


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

von Rufus T. Firefly (Gast)


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"?

von Steffen (Gast)


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.

von Rufus T. Firefly (Gast)


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.

von Steffen (Gast)


Lesenswert?

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

von MyMeisle (Gast)


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

von Steffen (Gast)


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

von MyMeisle (Gast)


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

von tex (Gast)


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 ...

von Rufus T. Firefly (Gast)


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?

von Norbert aus E. (Gast)


Lesenswert?

Köstlich und Lehrreich zugleich!

von tex (Gast)


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! ...

von Rufus T. Firefly (Gast)


Lesenswert?

Ist das Satire?

von tex (Gast)


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.

von Rufus T. Firefly (Gast)


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.

von OldBug (Gast)


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!

von tex (Gast)


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().

von OldBug (Gast)


Lesenswert?

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

SCNR

von Rufus T. Firefly (Gast)


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.

von tex (Gast)


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!

von Rufus T. Firefly (Gast)


Lesenswert?

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

Hersteller, Versionsbezeichnung etc.

von MyMeisle (Gast)


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

von tex (Gast)


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.

von tex (Gast)


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

von OldBug (Gast)


Lesenswert?

Bei Verwendung der avr-libc:

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

Ich hoffe, das Rezept ist gut genug ;)

von tex (Gast)


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?

von MyMeisle (Gast)


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

von OldBug (Gast)


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...

von Steffen (Gast)


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

von tex (Gast)


Lesenswert?

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

von OldBug (Gast)


Lesenswert?

Eine Brille?

scnr

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
Noch kein Account? Hier anmelden.