Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

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 Thomas, > > 1.Es ist extrem unhöflich über jemanden in der dritten Person zu sprechen/schreiben, > wenn man direkt auf das Posting antwortet. > 2. Du schreibst so, als hätte ich eine Auskunftspflicht und müsste allem bis ins > kleinste Detail antworten. > > > erst einmal eines vorweg: > > > > Die hwcom-Routinen sind in Ordnung. > > Warum machst Du dann einen Thread mit dem Topic "hwcom-Modul fehlerhaft", > wenn an hwcom.c2 keinerlei Fehler sind. > Das war von Dir eine Behauptung, die ich wiederlegt habe. > > > 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. > > Das stimmt nicht ganz. > Mit Abfrage von hwcom.ready() kann man dies abfangen. > > > Allerdings würde das Verwenden von Konstanten z.B. > > bei einer Menuführung einige Vorteile bringen. > > Das direkte Angeben bei hwcom.c2 und swcom.c2 bringt VM-technisch keinerlei Vorteile. > Hier ist das Benutzen von eigenen Variablen besser. > Die Abänderung der Print-Funktion mit der Möglichkeit direkt Strings (Konstanten) > anzugeben, habe ich nur auf bitten von ein paar Usern gemacht. > > > > 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. > > Ich habe alles nötige mitgeteilt. > Ich setze natürlich vorraus, daß man > - als erstes das Handbuch liest, bzw. in den entsprechenden Kapiteln > nachschlägt. (Konstanten, Strings, Funcktionen, hwcom.send()) > - sich die Funktionen im Modul hwcom.c2 näher ansieht > - als nächstes im Forum die Suchfunktion benutzt. > > Wie ich an Deiner Antwort erkennen kann, hast Du <u>nichts</u> davon gemacht !!! > Im Handbuch steht 99% davon, was man zu diesem Thema wissen muß. > > > Die von ihm gegebene Begründung ist so nicht richtig!! > > > Falsch. Sie ist 100% richtig. > > > > 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! > > Es können keine Festtexte direkt gesendet werden ! > Nur Daten aus Segment 8 (RAM) können übergeben werden ! > Konstanten, sofern es keine Byte oder Integer-Einzelwerte sind, werden immer > im Konstantenspeicher, Seg. 6 & 7, abgelegt. > Es ist egal, ob Du den String vorher als Konstante defninierst, oder > direkt mit hwcom.print("123245") angibst. Der String landet immer im Konstantenspeicher. > > > > > 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. > > <b>LESE DAS HANDBUCH !!!</b> > Ich setze, wie gesagt gewisse Grundlagen vorraus ! > Ist es zuviel verlangt, das Handbuch zu lesen !? > > Ich habe nichts verschwiegen ! > In hwcom.print(string s) gibt es den String s. Das ist die Stringvariable, die ich gemeint habe. > > Deine Ausdrucksweise kann ich so nicht akzeptieren. > Du schreibst so, als hätte ich eine Auskunftspflicht und müsste jedem bis ins > kleinste Detail antworten, auch das was überdeutlich im Handbuch steht ! > Insgesamt sehe ich Deine schreibweise eher als beleidigend an ! > > Angegebene (String-)Konstanten werden in den String s von > <code>function print(string s)</code> umkopiert. > String-Variablen werden als Referenz übergeben. > Darum ist es von der Programmausführtung vorteilhafter mit String-Variablen > zu arbeiten, in denen die String-Konstanten zuerst kopiert werden, bevor > man diese an die hwcom.print() (besser print2()) übergibt. > Das Programm wird dadurch nicht länger ! > Die Ausführung kann jedoch schneller erfolgen. > > > > 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. > > Das steht auch überdeutlich im Handbuch ! > Es werden nie Konstanten ausgegeben, sondern Variabeln bzw. Var.-Arrays(=Strings). > In diesem Fall ist es die lokale Variable s in hwcom.print() > > > Diese werden immer im Segment 8 erwartet. Die Konstanten liegen allerdings im > > Programmcode und der liegt nicht in diesem Segment. > > Falsch ! > Konstanten liegen nicht im Programmcode, sondern im Konstantenspeicher. > Das steht auch sehr deutlich im Handbuch. > Die einzigen Konstanten, die in den Programmcode eingebettet werden, sind Byte und > Integerwerte. (Nur bei Einzelwerten, nicht Arrays) Siehe Handbuch Kap. 5.6.5 . > > > 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. > > Der Compiler erzeugt keine undefinierten/"unsichtbaren" Variablen. Die Definitionen > stehen überdeutlich in den Modulen ! > Bsp.: > <code>hwcom.print(string s)</code> > Hier wird die lokale Stringvariable s defniniert. Aber nur, wenn eine Festtext, also > eine Stringkonstante übergeben wird. > Wird eine String-Variable übergeben, so ist s nur die Referenz auf diese. > Es wird dann keine eigene Variable angelegt, sondern s beleget denselben Speicher, > wie die übergebene Variable.. > > <code>str.length(string s)</code> > Hier verhält es sich absolut identisch. > > Was hier mit hwcom.print() und anschließendem str.length() passiert ist folgendes: > Da Du eine Stringkonstante übergibst, wird in hwcom.print die Var s neu angelegt. > die Startadresse wird an print2(), welche diese wiederum an send() übergibt, > übergeben. Da bei hwcom.c2 und swcom.c2 die Ausgabe im Hintergrund in einem > eigenen Systemthread erfolgt, kommt die Funktion sofort nach Übergabe > der Speicheradresse von s wieder zurück. > Beim Beenden der Funktion hwcom.print() wird s wieder freigegeben. > Da Du an str.length() wieder eine Stringkonstante übergibst, wird hier s wieder als > Variable angelegt. Da der Speicherplatz der Variable s von hwcom.print() zuvor > wieder freigegeben und die Ausgabe noch nicht beendet wurde. Wird hier > s von str.length() derselbe Speicherbereich zugeordnet, und somit von > dem Systemthread, welcher das senden an hwcom übernimmt, ausgegeben. > > Da die Diskussion hier für mich beendet ist, solange Du das Handbuch nicht liest, > mache folgende Änderung in hwcom.print(), wenn Du unbedingt die Konstanten direkt: > übergeben willst. > <code>//---------------------------------------- > function print ( string s ) > //---------------------------------------- > { > print2(s); > wait ready(); > }</code> > > Allerdings rate ich immer zur verwendeung von extra Variablen bei der Verwendung > der Sende-Funktionen bei den ser.Schnittstellen. > Die Ausgabe ist einfach schneller, und der Programm-Code(VMC) wird dadurch auch nicht länger ! > > Und noch etwas allgemeines für die Vorgehensweise bei Problemen: > 1. Handbuch lesen > 2. FAQ benutzen > 3. Suchfunktion im Forum nutzen > 4. Dann erst im Forum posten > > > MfG André H.
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB