如何定义描述内存位置的宏?

变量位于存储器中的地址0x10000处。 如何定义一个宏,以便写入该宏写入该内存位置?

在C中声明可写内存位置的事实上的标准方法是:

 #define REGISTER (*(volatile uint8_t*)0x10000) 

其中uint8_t应该对应于该内存位置的内容大小。

然后REGISTER = something; 写入该内存位置,就像REGISTER是一个变量一样。

使用volatile关键字非常重要,以防止优化错误并确保读取位置始终是最新的。

像这样的东西应该做的伎俩:

 #define WRITE_TO_0X10000(v) (*((char *)0x10000) = (char)(v)) 

你没有定义应该写什么样的值,我认为要写一个字节。 该宏执行以下操作:

  1. 将值0x10000转换为指向char的指针((char *)0x10000)
  2. 强制该值为char(8位) ((char)(v))
  3. 将值写入内存指向*pointer = value

另一种可能性是:

 #define POINTER_TO_0x10000 ((char *)0x10000) *POINTER_TO_0X10000 = some_char_value 

您可以轻松适应您需要的任何其他类型。