在C ++中检查地址的volatile值

时间:2014-05-06 09:51:21

标签: c++ arrays pointers raspberry-pi volatile

我正在尝试为Raspberry Pi实现邮箱写入。根据我发现的信息,当邮箱为空时,我可以写入地址0x2000B8A0,这意味着0x2000B898没有设置最后一位。我是这样写的:

uint32_t *mailbox = reinterpret_cast<uint32_t*>(0x2000B880);

while((mailbox[6] & 0x80000000) != 0);

mailbox[8] = value + channel;

但反汇编显示mailbox[6]的值仅在循环之前加载一次,然后它只用该值重复检查。

我找不到解决方案,因为我甚至不知道这个问题的正确用语。我确信这很简单,但谷歌搜索没有为这个特殊情况带来任何好处。

1 个答案:

答案 0 :(得分:5)

答案在于你的问题的标题。 您应该使用以下内容:

volatile uint32_t *mailbox = const_cast<volatile uint32_t *>(reinterpret_cast<uint32_t*>(0x2000B880));

这将确保每次在循环中加载值。如果您看到任何application not responding,请考虑在其中添加一些sleepdelayyield