1

我正在将旧代码从 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;

他们是让这段代码更跨平台友好的聪明方法吗?我想尽可能少地直接更改此代码。

谢谢您的帮助

4

0 回答 0