变量位于地址0x10000的内存中。如何定义一个宏,以便写入该宏写入该内存位置?
答案 0 :(得分:6)
在C中声明可写内存位置的事实标准方法是:
#define REGISTER (*(volatile uint8_t*)0x10000)
其中uint8_t
应该与该内存位置的内容大小相对应。
然后REGISTER = something;
写入该内存位置,就像REGISTER是一个变量一样。
使用volatile
关键字非常重要,以防止优化错误并确保对位置的读取始终是最新的。
答案 1 :(得分:1)
这样的事情可以解决问题:
#define WRITE_TO_0X10000(v) (*((char *)0x10000) = (char)(v))
你没有定义应该写什么样的值,我认为要写一个字节。该宏执行以下操作:
((char *)0x10000)
((char)(v))
*pointer = value
另一种可能性是:
#define POINTER_TO_0x10000 ((char *)0x10000)
*POINTER_TO_0X10000 = some_char_value
您可以轻松适应您需要的任何其他类型。