使用乱序数据字段对硬件寄存器建模

我具有以下内存结构:

struct {
   uint16_t MSB_VALUE : 8;
   uint16_t : 8;
   uint16_t LSB_VALUE;
} BIG_VALUE;

此结构一起代表由硬件固定的32位内存部分。可以使用Verilog串联表示法来表示BIG_VALUE的值:

BIG_VALUE = { MSB_VALUE[7:0],LSB_VALUE[15:0] } 

我希望能够编写一个并集(或其他形式),以便可以使用点表示法访问BIG_VALUE的值。也许像这样的愚蠢:

union {
   uint32_t val;
   struct {
      uint16_t MSB_VALUE : 8;
      uint16_t : 8;
      uint16_t LSB_VALUE;
   } sub;
} BIG_VALUE;

但是,问题在于,MSB在内存中的LSB之前(也有8位的间隔),因此调用BIG_VALUE.val不会获得希望的值。

我对可以尝试的东西含糊不清,但是我只是感到困惑。有没有办法在工会/结构形式主义中做到这一点,还是我现在应该放弃?我猜放弃是指必须手动分割24位值,然后将其存储到适当的字段中。如果可行的话,也许我可以写一个函数稍后再做。

具有这项工作意味着我可以使用点表示法存储24位值,并使数据进入内存中的适当位置。例如:

BIG_VALUE.val = 0x0031FFFE
Then 
BIG_VALUE.MSB_VALUE == 0x31
and
BIG_VALUE.LSB_VALUE == 0xFFFE

But the memory layout would be
addr    : 0x0031
addr +4 : 0xFFFE
MELIDY 回答:使用乱序数据字段对硬件寄存器建模

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2945428.html

大家都在问