C18 compilador typedef enum tamanho dados
Pergunta
Eu estou tentando código de porta sobre a compilar usando o compilador C18 da Microchip por um microcontrolador PIC. O código inclui enums com grandes valores atribuídos (> 8-bit). Eles não estão funcionando corretamente, indicando que, por exemplo, 0x02 é o mesmo que 0x2002.
Como posso forçar os valores enumerados para ser referenciado como valores de 16 bits?
Solução 2
Eu encontrei o problema.
Para referência futura, o compilador C18 vai NÃO promover variáveis ??ou constantes ao executar uma operação matemática, embora seja padrão ANSI C. Esta é para aumentar a velocidade durante a execução em processadores de 8 bits.
Para forçar o cumprimento ANSI, use a opção do compilador "-Oi".
Outras dicas
Nos cabeçalhos DirectX, cada enum tem um valor FORCE_DWORD
nele com um valor de 0xffffffff
. Eu acho que é basicamente o que você quer, ele obriga a compilador para deixar os enum Tem , pelo menos, 32 bits. Então, tente adicionar um FORCE_WORD
com um valor de 0xffff
.
Isso não vai resolver o seu problema, é claro, se isso compilador just não suporta enums superiores a 8 bits.