我正在尝试为Raspberry Pi实现邮箱写入。根据我发现的信息,当邮箱为空时,我可以写入地址0x2000B8A0
,这意味着0x2000B898
没有设置最后一位。我是这样写的:
uint32_t *mailbox = reinterpret_cast<uint32_t*>(0x2000B880);
while((mailbox[6] & 0x80000000) != 0);
mailbox[8] = value + channel;
但反汇编显示mailbox[6]
的值仅在循环之前加载一次,然后它只用该值重复检查。
我找不到解决方案,因为我甚至不知道这个问题的正确用语。我确信这很简单,但谷歌搜索没有为这个特殊情况带来任何好处。
答案 0 :(得分:5)
答案在于你的问题的标题。 您应该使用以下内容:
volatile uint32_t *mailbox = const_cast<volatile uint32_t *>(reinterpret_cast<uint32_t*>(0x2000B880));
这将确保每次在循环中加载值。如果您看到任何application not responding
,请考虑在其中添加一些sleep
或delay
或yield
。