Dimensione dei dati enumerata dal compilatore C18
Domanda
Sto provando a eseguire il port del codice per compilare usando il compilatore C18 di Microchip per un microcontrollore PIC. Il codice include enum con grandi valori assegnati (> 8-bit). Non funzionano correttamente, indicando che, ad esempio, 0x02 è uguale a 0x2002.
Come posso forzare i valori enumerati a cui fare riferimento come valori a 16 bit?
Soluzione 2
Ho trovato il problema.
Per riferimento futuro, il compilatore C18 NON promuoverà variabili o costanti durante l'esecuzione di un'operazione matematica, anche se è lo standard ANSI C. Questo per aumentare la velocità durante l'esecuzione su processori a 8 bit.
Per forzare la conformità ANSI, utilizzare il " -Oi " opzione del compilatore.
Altri suggerimenti
Nelle intestazioni DirectX, ogni enum contiene un valore FORCE_DWORD
con un valore di 0xffffffff
. Immagino sia fondamentalmente quello che vuoi, costringe il compilatore a lasciare che l'enum abbia almeno 32 bit. Quindi prova ad aggiungere un FORCE_WORD
con un valore di 0xffff
.
Questo non risolverà il tuo problema, ovviamente, se quel compilatore non supporta enum maggiori di 8 bit.