Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo, > > erst einmal eines vorweg: > > Die hwcom-Routinen sind in Ordnung. > > Trotzdem gibt es weiterhin das beschriebene Problem, dass nur durch das generelle > Verwenden von Variablen zur Ausgabe von Daten über die hwcom-Schnittstelle > vermieden werden kann. Allerdings würde das Verwenden von Konstanten z.B. > bei einer Menuführung einige Vorteile bringen. > > Aber was ist denn nun eigentlich das Problem? Wie "zwischen den Zeilen" aus > Andre's Antwort zu ersehen ist, weiß er die Antwort, teilt sie uns aber leider > nicht mit. Die von ihm gegebene Begründung ist so nicht richtig!! > > Ich versuche das Ganze aufzuklären (am Ende des Textes). > > > Hallo Thomas, > > > > > Wenn ich kurz hintereinander einzelne Strings sende, dann kommt am anderen Ende > > > nur "MIST" an! > > > > > > Also, wenn ich z.B. folgendes schreibe: > > > <code> > > > hwcom.print("Hallo "); > > > hwcom.print("Du "); > > > hwcom.print("Da!"); > > > hwcom.ret(); > > > </code> > > > > > > dann kommt am anderen Ende nur folgendes an: > > > "HaDa!Da!" > > > Dies ist abhängig von der eingestellten Übertragungsrate und dem Zufall. > > > > Im Modul hwcom.c2 sind diesbezüglich <u>keinerlei</u> Fehler ! > > Wenn Du mit hwcom Festtexte ausgibst, mußt Du warten, bis > > der vorherige String gesendet wurde. Denn, wie heißt es schon so schön > > deutlich im Handbuch zur CC2: Das Senden von Datenrahmen (=Byterrays=Strings) > > geschieht im Hintergrund (=eigener Systemthread). > > Und hier steckt die erste Unsauberkeit: > Eigentlich dürften Festtexte kein Problem mit einer Verarbeitung im Hintergrund > haben, da sie bereits bei der Programmerzeugung während der Kompilierung erzeugt > werden und nicht mehr verändert werden. Somit dürfte das nur für Variablen > gelten! > Bei jeder normalen Programmiersprache wäre das auch so, nicht bei der > Programmiersprache der C-Control II. > > > > > > Eigentlich dürfte dies nicht passieren, da in den Routinen im Modul "hwcom" > > > wait-Aufrufe vorhanden sind. Allerdings werden diese anscheinend nicht ausgeführt!! > > > > Natürlich werden diese ausgeführt. > > Du überschreibst nur mit jedem neuem print() die zu sendende Variable, > > bevor sie gesendet wurde. > > Hier ist die nächste Unsauberkeit: Welche Variable denn? > In meinem Beispiel wird nicht eine einzige Variable verwendet; nur Konstanten! > Dies zeigt allerdings auch, dass Andre den Hintergrund, warum es nicht > funktioniert, kennt. > > Das von Andre gegebene Beispiel ist richtig und funktioniert wie erwartet: > > > > Wenn su beispielsweise so schreibst, gibt es keine Probleme: > > <code> string s1,s2; > > ... > > s1="Hallo "; > > hwcom.print(s1); > > s2="Du "; > > hwcom.print(s2); > > hwcom.print("Da!"); > > hwcom.ret();</code> > > > > Kurz, wenn Du abwechselnd zwei Variablen benutzt, gibt's keine Probleme. > > Außerdem ist diese Art des Sendens von Datenrahmen/Strings am schnellsten. > > > > Natürlich hätte ich in hwcom.print() eine ready()-Abfrage am Ende der print()-Funktion > > einbauen können. Dann würde aber der zugreifende Thread unnötig ausgebremst, > > wenn dieder nich nur senden muß, sondern auch noch andere Aufgaben erfüllt. > > (z.B. Aufbereiten von zu sendenden Daten vor dem Senden etc.) > > Ansonsten dürfte man nurnoch hwcom.print2() für das senden von Stringvariablen verwenden. > > > > Sorry, aber langsam bin ich das Thema hwcom etwas leid, da dazu schon so viel geschrieben > > wurde, und die Suchfunktion mittlerweile sicher genug Antworten dazu liefert !! > > > > MfG André H. > > > > Nun zur Beschreibung des Problems. Der folgende Programmcode hat das gleiche Problem, > das ich in meinem ersten Beitrag beschrieben habe: > <code> > const HINWEIS = "HEX-Ziffern" > const HEX = "0123456789ABCDEF" > int i,len; > > hwcom.print(HINWEIS); // Ausgabe der Hinweistextekonstanten > len = str.length(HEX); // Textlänge ermitteln > for i = 0..len-1 > { > ... > } > </code> > > Was man hier wohl nicht erwarten würde: auf der seriellen Schnittstelle wird nicht > die Konstante <b>HINWEIS</b> sondern die Konstante <b>HEX</b> ausgegeben! > Strings werden immer als Referenz an Funktionen übergeben. > Diese werden immer im Segment 8 erwartet. Die Konstanten liegen allerdings im > Programmcode und der liegt nicht in diesem Segment. Also kann die Konstante eigentlich > nicht an die Funktion übergeben werden. Der Kompiler behilft sich, in dem er einfach > eine Variable erzeugt, den Inhalt der Konstanten hineinkopiert und an die Funktion über- > gibt. Dies macht er allerdings nicht nur beim Aufruf der <b>hwcom.print()</b>-Funktion > sondern auch beim Aufruf der <b>str.length()</b>-Funktion. Und so wird der Inhalt der > (unsichtbaren) "Variablen" die der print-Funktion übergeben wurde in der nächsten > Zeile beim Aufruf der length-Funktion wieder überschrieben. > > > mfg > Thomas