ARM上的遗留位域兼容性问题

时间:2013-10-21 21:17:59

标签: arm bit-fields

我正致力于将遗留代码从PowerPC移植到ARM上。原始开发人员在代码的一个非常重要的部分使用了位域。当我使用ARM工具链进行交叉编译时,我得到了

warning: multiple accesses to volatile structure member because of packed attribute [-  fstrict-volatile-bitfields]

这显然是由于位域打包和偏移的方式,这似乎与ARM工具链不兼容。我发现GCC的一个补丁已经发布了,但它看起来并没有真正修复这个问题(我个人还没有尝试过补丁)。

例如,位域在头文件

中定义
typedef struct
   {  
   T8    BitFieldOffset;     //current bit offset value
   Tsv32 Data; //extracted bit field (may be exp_golomb- unsigned or signed)
   }  __pack__ TExtractBits;
   Tn8* extractBitField (Tn8 *pBuf, TExtractBits *pExtractBits, T32 numFieldBits);

然后在.cpp中,

TExtractBits teb;
teb.BitFieldOffset = 0;
pBuf = extractBitField(pBuf, &teb, 1); TimeCode_DropFrame = teb.Data;
pBuf = extractBitField(pBuf, &teb, 5); TimeCode_Hours = teb.Data;
pBuf = extractBitField(pBuf, &teb, 6); TimeCode_Minutes = teb.Data;

他们是一个聪明的方法,使这个代码更加跨平台友好?我想尽可能少地直接更改此代码。

感谢您的帮助

0 个答案:

没有答案