安全地直接写入内存地址

时间:2019-03-07 20:08:29

标签: c embedded

我正在写一个地址已知的寄存器。

volatile uint32_t *my_address =
    (volatile uint32_t *)MY_ADDRESS;

*my_address = 0x1234;

写内存最安全的方法是什么?我已经读过它应该放在宏后面和/或我应该检查指针是否不为空。

谢谢

1 个答案:

答案 0 :(得分:1)

如果您想安全地写入/读取内存映射,则可以使用为此目的而设计的已有代码段,例如ARM的mmio.h头文件。

与示例中的代码等效的代码将是:

#include<mmio.h>
// ...
mmio_write_32(MY_ADDRESS, 0x1234);

由于头文件中包含的函数是静态内联的,因此不会因调用子例程而导致性能下降-代码将仅插入在程序中被调用的位置。

由于该头文件已被广泛使用,因此您可以合理地使用它来避免担心寄存器的读/写操作。

并且由于它是根据BSD 3-Clause获得许可的,因此您可以在商业和宠物项目中自由使用它。