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 Olaf, > > > da C2 ja eine getypte Sprache ist könnte der Compiler auch mal auf die linke Seite schauen, > > wie es "richtige" Programmiersprachen, wie z.B. Java tun. Folgendes Java Programm > > Das hat nichts(zumindest nicht direkt) mit dem Compiler zu tun. > Aus der Zeile > <code>long l; int i; > l=1 shl i;</code> > werden folgende Anweisungen: > - Lade die (Integer-)Konstante 1 als Integer auf den Stack > - Lade den Inhalt der Integervariable i als Integer auf den Stack. (Ob Integer oder byte ist hier egal) > - Führe die Schiebeoperation aus und lade das Ergebis als Integer auf den Stack, da > beides &lt;= Integer. > - Speichere den letzten Stackeintrag in l. > > > insofern ist Bug vielleicht der falsche Begriff, unerwartetes Verhalten und vor allem nicht > > konsistentes Verhalten (s.u.) trifft es wohl eher. > > Zugegebenermaßen hat die Entwicklung der Java Programmiersprache JavaSoft bzw. Sun > > auch bestimmt ein bisschen mehr Geld gekostet als C2 den Leuten von Conrad. > > Dieses Verhalten ist Sinnvoll. Denn es müssten alle Ganzzahlbereichnungen als > Long behandelt werden, damit dies geht. Da jedoch Longoperationen deutlich mehr > Rechenzeit benötigen, als Integer-Ops, wäre dies nicht vorteilhaft. > Auch ein Vorrauslesen würde das System unnötig langsam machen, da dies die VM > und nicht der Compiler machen müsste. > Gerde bei komplexeren Formeln würde man dies bemerken. > > > > Schließlich ist des C164CI ein 16Bit.-Controller und kein 32Bit. :-) > > das ist ein Implementationsdetail und sollte eine "Virtuelle" Maschine nicht beeindrucken, deswegen > > heißt Sie ja auch so. > > OK. Das Argument ist etwas unglücklich gewählt. > Jedoch wollte ich so darauf hinweisen, daß Integer Controllerseitig unterstützt werden, und > Long nur teilweise. > Alles andere muß VM-seitig gemacht werden. Das schluckt wiederum Rechenzeit. > > > > Das stimmt so nicht ganz denn folgendes passiert > > > > <code> > > long vlong, long1, vlong16; > > int vInt; > > > > vlong1 = 1; > > vInt16 = 16; > > vlong16 = 16; > > > > 1.) vlong = 1 shl 16; funktioniert im Simulator, ccontrol habe ich nicht getestet. > > 2.) vlong = 1 shl vInt16; funktioniert NICHT im Simulator und NICHT in der CCONTROL > > 3.) vlong = 1 shl vLong16; funktioniert im Simulator aber NICHT in der CCONTROL > > 4.) vlong = vlong1 shl vInt16; funktioniert im Simulator und in der CCONTROL > > </code> > > > > Wenn deine Aussage oben richtig wäre würde Fall 1.) mit reinen Konstantenausdrücken > > nicht und Fall 3.) funktionieren. > > Im Fall 3.) passiert aber etwas wirklich unschönes, nämlich dass es im Simulator > > läuft in der echten CControl aber nicht. > > Wahrscheinlich ist der "shift" Operator hier ein Sonderfall, da dieser den Typ des rechten > > Operanten nur bedingt in die Berechnung einbezieht... > > Meine Aussage stimmt 99%ig. :-) > Das kann ich sogar beweisen. ;-) > > Zu Fall 1: > Dies wird nicht im Controller berechnet! :-) > Siehe Handbuch Kap. "5.3.5 Ausdrücke". > Berechnungen, bestehend aus Konstanten werden bereits vom Compiler durchgeführt. > Kurz: Der Compiler macht aus > <code>vlong = 1 shl 16;</code> > einfach > <code>vlong = 0x10000;</code>. > Da 0x10000 größer als der Integerbereich ist, legt der Compiler diesenb Wert als Konstante > im Konstantenspeicher ab. > > Zu Fall 3: > Gut, hier macht die VM scheinbar einen Fehler, da sie den Variabel-Typ des > zu schiebenden Wertes beibehält. > Allerdings lässt sich dies auch wieder erklären: > Was für einen Sinn macht es, einen größeren Wertbereich als Byte > für die Anzahl der Schiebeoperationen anzugeben. :-) > Mehr als 32 macht keinen Sinn. > Daher ändere ich zu Fall 3 meine Aussage, daß der zu Schiebende Wert vom Typ > Long sein muß, wenn das Ergebnis auch Long sein soll. > (genaugenommen habe ich das auch gerade im Handbuch etwas versteckt gefunden. :-) ) > > > Also meine Warnung an alle Programmierer erhalte ich aufrecht und denke das dieses ein > > zumindest nicht korrektes Verhalten darstellt. > > Die Warnung ist dennoch unnötig, da dies bereits in den FAQ steht. :-) > Nur, daß bei den SH-Ops der zuschiebende Wert dem Typ des Ergebnisses entsprechen muß. > > MfG André H.
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB