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?

È stato utile?

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.

Vedi pagina 92 ??del manuale C18.

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top