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

时间:2015-12-02 08:50:15

标签: c macros

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

2 个答案:

答案 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))

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

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

    另一种可能性是:

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

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