8位枚举,在C中

Lyn*_*ite 24 c avr avr-studio4 winavr avr-gcc

我必须存储指令,我将通过串口接收命令.命令长度为8位.

我需要保持命令名称及其值之间的透明度.这样可以避免将串行接收的8位数转换为任何类型.

我想在我的代码中使用Enumerations来处理它们.只有枚举对应于此平台上的16位整数.

该平台是AVR ATmega169V微控制器,位于Butterfly演示板上.它是一个8位系统,对16位操作提供一些有限的支持.它不是一个快速的系统,有大约1KB的RAM.它没有像文件I/O或操作系统那样的任何奢侈品.

那么关于我应该用什么类型来存储8位命令的任何建议呢?
必须有比#defines的大量标题更好的东西.

Mic*_*kis 36

gcc-fshort-enums可能是有用的:

分配给"枚举"类型的字节数仅为声明的可能值范围所需的字节数.具体来说,"枚举"类型将等同于具有足够空间的最小整数类型.

事实上,是一个包含大量相关信息的页面.我希望你遇到许多你从未知道的GCC开关.;)

  • 我将把它添加到我从未知道存在的有用的gcc开关集合中. (5认同)
  • 哈,我今天意识到如果我通过AVR studio 4 IDE进行编译,那么它默认开启 (4认同)

AnT*_*AnT 7

您正在尝试解决不存在的问题.

您的问题被标记为C.在C语言中,值上下文中的枚举类型与整数类型完全兼容,其行为与其他整数类型一样.在表达式中使用时,它们与其他整数类型完全相同.一旦考虑到这一点,你应该意识到如果你想用8位整数类型存储枚举常量描述的值,你所要做的就是选择一个合适的通用8位整数类型(比如说int8_t)并使用它而不是枚举类型.通过将枚举常量值存储在类型的对象中int8_t(与使用枚举类型显式声明的对象相反),您绝对不会失去任何东西.

您描述的问题将存在于C++中,其中枚举类型与其他整数类型分开得更远.在C++中,为了节省内存而使用整数类型代替枚举类型更加困难(尽管可能).但不是在C中,它不需要任何额外的努力.

  • @ oxinabox.ucc.asn.au:线程在第一页上加速.我不知道为什么.原来如此.*你*编辑它(将"评论"替换为"推荐",BTW :)现在你指责*me*of therad necromancy? (2认同)