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, > > > Wenn die VM einen Long oder Float auf dem Stack hat, muss sie das doch wissen? Sonst kein korrekter "pop" und damit > > keine korrekter "return", oder? Oder wird bei einem einfachen Ausdruck / Literal, egal ob long oder float > > nur ein Wort (die unteren 16 Bit) übergeben. Dann wäre die VM / das OS bereits zu spät, um den > > Fehler zu fixen. Wie schaut der VM-Code für einen einfachen Ausdruck aus? > > Ich hab' mit einmal den VM-Code genauer angesehen: > Bsp: > <code>long x; > thread main > { > if x quit 2; > }</code> > Dies erzeugt foglenden VM-Code: > <code>141 20 26 133 2 580 1 132 65527 65535 65535 65535 65535 65535 65535 65535</code> > Für die, die den VM-Code so nicht lesen können: > 141 20: VM_LOAD_FLOAT = Lade Float an Adresse 20 in den Stack > 26 : VM_CAST_LONG_TO_INT = Mache aus dem Float im Stack einen Integer ! > 133 2: VM_BRANCH_IF_ZERO = Springe, wenn letzter Stackeintrag 0 ist, zwei Words weiter > 580 = 0x244: VM_LOAD_IMMEDIATE_BYTE = Lade Bytewert "2" auf den Stack > 1 : VM_QUIT = Führe Quit aus > 132 65527: VM_BRANCH = Springe 8 Words zurück (Thread-Schleife) > > Man sieht also, daß der Compiler die IF-Anweisung von selbst auf Integer kürzt. > Also kommt es nicht zu einem Stackfehler. > > Jedoch ist der Compiler hier etwas unglücklich geschrieben. > Man hätte statt einem einfachen <code>VM_CAST_LONG_TO_INT</code> bei allen > Datentypen größer Integer automatisch bei ein <code><Bedingung> != 0</code> einfügen können. > > Tja, aber das hilft jetzt nichts, da der Compiler in dieser Hinsicht nicht gepatcht werden kann. > Also muß man sich hier diese Schreibweise angewöhnen. > Denn auch die VMC-Datei per Hand(oder Tool) nachzubearbeiten, bringt auch nichts, da das > Konstrukt mit Prüfung auf ungleich 0 ein VM-Code mehr benötigt. > Das einzige, was ginge, wäre eine des OS, damit VM_BRANCH_IF_ZERO einen zusätzlichen > Parameter bekommt, und gleichzeitig ein Tool, welches aus der Folge "26 133" (0x1A, 0x85) > z.B. diese Folge macht: 0 389 (0x0=NOP, 0x185 = Paramter 1 zusätzlich zu 0x85) > > Die nächste Möglichkeit wäre natürlich dies rein OS-seitig zu lösen. > Dies ginge, indem bei <code>VM_CAST_LONG_TO_INT</code> das folgende Word auch gelesen wird, > ohne den Datenzeiger zu verändern, und, sobald das folgende Word den Wert 133 hat, > werden bei <code>VM_CAST_LONG_TO_INT</code> eben nicht einfach die oberen 16 Bit > abgeschnitten, sondern eine Oder-Verknüpfung zwischen Hi-Word und Lo-Word gemacht. > Mal sehen, ob ich dies in OSOPT V3.1 irgendwie implementieren kann. > > Aber, ob sich der Aufwand lohnt ? > > MfG André H.
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB