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?

¿Fue útil?

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.

Consulte la página 92 ??del manual C18.

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top