工具/软件:TI C/C++编译器
您好,
我的蛇腹上有一个问题,我正在寻求帮助。
让我们来总结一下这个问题:)
我想在ARM和C28之间共享枚举。
此枚举为“小”,可以用字符编码。 我"包装"结构,以确保对齐不会掩盖我的问题。
我用下面的简单示例总结了我的代码:
#if defined(__TMS320C2000__)
//缺省情况下,结构在DSP上打包
#define struct_packed
#Elif defined(__TI_arm__)
#define struct_packed __attribute_(__packed__)#endif
typedef {
A,
B,
C
foo;
struct struct struct struct __packed __attribute___(((((((__packed___packed___)))))}{a,B,C
numValue } foopet_num_num_num_num_uelet
默认情况下,编译器将看到大小为以下两个枚举:
- ARM -> Int -> 32位
- C28 ->内部-> 16位
- 不好,我们在这里看到了两个处理器之间明显的错位。
编译器上有关enum的选项似乎不同:
- ARM ->--small_enum
- ARM ->--enum类型(封装/int)
- C28 ->未找到有关枚举大小的任何选项,但找到了Strict C89/C99选项。
承认我启用了其中一个选项,发生了什么?
使用--small_enum编译的ARM启用:
ARM -> CHAR -> 8位
C28 ->内部-> 16位
不正常
使用--enum类型=int编译的ARM
ARM -> Int -> 32位
C28 ->内部-> 16位
不正常
使用--enum类型=packed编译的ARM
ARM -> Int -> 32位
C28 ->内部-> 16位
不正常
是否有一种“干净”的方法来正确编译双方?
你有甚么建议可以妥善处理这类情况呢?
非常感谢!
谢谢,
T.