2009-08-05 2 views
1

Ich versuche, den Code umzuwandeln, um mit dem C18-Compiler von Microchip für einen PIC-Mikrocontroller zu kompilieren. Der Code enthält Enums mit großen zugewiesenen Werten (> 8 Bit). Sie funktionieren nicht ordnungsgemäß und zeigen an, dass beispielsweise 0x02 mit 0x2002 identisch ist.C18-Compiler typedef enum Datengröße

Wie kann ich erzwingen, dass die aufgelisteten Werte als 16-Bit-Werte referenziert werden?

Antwort

1

Ich habe das Problem gefunden.

Für zukünftige Referenz wird der C18-Compiler nicht Variablen oder Konstanten fördern, wenn eine mathematische Operation ausgeführt wird, obwohl es ANSI C-Standard ist. Dies erhöht die Geschwindigkeit beim Ausführen auf 8-Bit-Prozessoren.

Um die ANSI-Kompatibilität zu erzwingen, verwenden Sie die Compileroption "-Oi".

See page 92 of the C18 manual.

1

In den DirectX-Headern hat jede Enum einen FORCE_DWORD Wert mit einem Wert von 0xffffffff. Ich denke, das ist im Grunde, was Sie wollen, es zwingt Compiler, um die enum mindestens 32 Bits zu lassen. Versuchen Sie also, einen FORCE_WORD mit einem Wert von 0xffff hinzuzufügen.

Das wird natürlich Ihr Problem nicht lösen, wenn dieser Compiler Enums mit mehr als 8 Bit nicht unterstützt.