C18编译器typedef枚举数据大小

时间:2009-08-05 12:54:59

标签: enums size microchip

我正在尝试将代码移植到使用Microchip的C18编译器进行编译,以用于PIC单片机。该代码包括分配了大值的枚举(> 8位)。它们无法正常工作,表示例如0x02与0x2002相同。

如何强制枚举值作为16位值引用?

2 个答案:

答案 0 :(得分:1)

在DirectX标头中,每个枚举都有一个FORCE_DWORD值,其值为0xffffffff。我想这基本上就是你想要的,它迫使编译器让枚举至少 32位。因此,请尝试添加FORCE_WORD,其值为0xffff

当然,如果该编译器不支持大于8位的枚举,这不会解决您的问题。

答案 1 :(得分:1)

我发现了问题。

为了将来参考,C18编译器在执行数学运算时不会提升变量OR常量,即使它是ANSI C标准。这是为了在8位处理器上运行时提高速度。

要强制ANSI合规性,请使用“-Oi”编译器选项。

See page 92 of the C18 manual.