C18 compilador typedef enum tamaño de datos
Pregunta
Estoy intentando transferir el código para compilar usando el compilador C18 de Microchip para un microcontrolador PIC. El código incluye enumeraciones con grandes valores asignados (> 8 bits). No funcionan correctamente, lo que indica que, por ejemplo, 0x02 es igual que 0x2002.
¿Cómo puedo forzar que los valores enumerados sean referenciados como valores de 16 bits?
Solución 2
Encontré el problema.
Para referencia futura, el compilador C18 NO promoverá variables O constantes cuando realice una operación matemática, aunque sea un estándar ANSI C. Esto es para aumentar la velocidad mientras se ejecuta en procesadores de 8 bits.
Para forzar el cumplimiento de ANSI, use el " -Oi " opción del compilador.
Otros consejos
En los encabezados DirectX, cada enumeración tiene un valor FORCE_DWORD
con un valor de 0xffffffff
. Supongo que eso es básicamente lo que quieres, obliga al compilador a dejar que la enumeración tenga al menos 32 bits. Por lo tanto, intente agregar un FORCE_WORD
con un valor de 0xffff
.
Esto no resolverá su problema, por supuesto, si ese compilador simplemente no admite enumeraciones mayores de 8 bits.