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?

Foi útil?

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".

Consulte a página 92 ??do manual C18.

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top