
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
> > > Ja, das ist in der Tat ein fetter Compiler-Bug. > > Hallo, > > an und für sich übersetzt der Compiler das syntaktisch schon richtig. Als man früher die Tokens > für C-Control I CCBasic entwarf waren maximal 192 Bit ansprechbbar jetzt wären es theoretisch 512. > Die Zahl 512 kann man aber nicht mit einem Byte darstellen, wobei die C-Control mir genau ein Byte > gibt um das Offset einer Variable zu wählen. Nach genauer Betrachtung hast Du Recht. Ist mehr ein Design Problem der Unit 2.0. > > Ein Workaround wäre es die Bit Variablen alle nach unten zu legen mit {BITOFFSET} und diese Bytes > dann alle mit {ASSIGN} reservieren. > > Einfach mal das Online Update ausführen! Schon gefixt? Wow! Werd ich ausprobieren. Danke. > > Was natürlich in den Compiler gehört ist eine Abfrage. Ich habe jetzt eine Abfrage eingebaut, die > einen Fehler ausgibt, wenn ein Offset größer als 255 ist (denn dies kann die C-Control nicht > speichern). Viel mehr kann ich da von der Seite des Compilers her nicht machen. Frage 1) Bei der alten MUnit 1.1/1.2 sollte man laut ConradDoku; wenn man der auch nicht immer glauben schenken kann .-) ; die Offsets von 1 bis xxx vergeben. Normalerweise kannte ich Offsets 0-basierend. Der Basic++ Compiler dann auch die "Basic-Offsets" in korrekte Offsets umzusetzen. Also 1->0 ... 256->255. Ich hab Deine neue Version noch nicht probiert, hoffe aber mal, daß man natürlich weiterhin "Bit[256]" verwenden kann. Oder sind die Offsets in Basic++ "richtige" Offsets im Bereich von [0..255]? Frage 2) Als Workaround habe ich meine Bits nun in die unteren 32 Byte verlegt. Habe jedoch folgendes festgestellt: Wenn man das reservierte Word für die Funktionsrückgabe versucht zu überschreiben, wird man bei der Definition eines Words oder Bytes mit einer Compiler-Warnung bedacht. Das gleiche passiert aber nicht bei den Bit-Offsets! Kann das sein, oder habe ich da was übersehen? Frage 3) Die Vergabe von Offsets kann ich verstehen. Ist ja schließlich auch ein Feature, mehrere Variablen überlagert zu nutzen. Dann stellt sich mir aber die Frage, warum man überhaupt Variablen ohne Offset und sogar Funktionsparameter/lokale Variablen ohne Offsets oder als nicht-Ref deklarieren kann? Wenn man auch nur ein Offset nicht vergibt ... kann der automatisch vom Compiler vergebene Offset alles andere zunichte machen. -> Also entweder man macht die Vergabe von Offsets zur Pflicht (dann aber auch bei allen Funktionsparametern und lokalen Variablen) ... oder man bringt dem Compiler einen intelligenteren "Offset-Vergabe" Mechanismus bei. Idee: a) Mittels einer Option könnte man die automatische Vergabe der Offsets anschalten. Dann MÜSSEN alle Variablen OHNE eigene Offset-Definition deklariert werden. Dieser Modus könnte Anfängern das Leben ungemein einfacher machen. Sie werden schon merken, wenn Ihnen die 24/64 Bytes ausgehen. Und die Überlappung von Variablen verstehen Sie sowieso nicht auf Anhieb. b) Wenn diese Option nicht gesetzt ist, MUSS man Offsets selber vergeben ... und das ÜBERALL. Dieser Modus ist für alle die, die wissen, was sie tun .-) Aber der Compiler darf dann nicht eigenmächtig handeln. > > Gruß, > > Stefan > Tschau Andreas |
| Antwort schreiben |