如何定义描述内存位置的宏?
变量位于存储器中的地址0x10000处。 如何定义一个宏,以便写入该宏写入该内存位置?
在C中声明可写内存位置的事实上的标准方法是:
#define REGISTER (*(volatile uint8_t*)0x10000)
其中uint8_t
应该对应于该内存位置的内容大小。
然后REGISTER = something;
写入该内存位置,就像REGISTER是一个变量一样。
使用volatile
关键字非常重要,以防止优化错误并确保读取位置始终是最新的。
像这样的东西应该做的伎俩:
#define WRITE_TO_0X10000(v) (*((char *)0x10000) = (char)(v))
你没有定义应该写什么样的值,我认为要写一个字节。 该宏执行以下操作:
- 将值0x10000转换为指向char的指针
((char *)0x10000)
- 强制该值为char(8位)
((char)(v))
- 将值写入内存指向
*pointer = value
另一种可能性是:
#define POINTER_TO_0x10000 ((char *)0x10000) *POINTER_TO_0X10000 = some_char_value
您可以轻松适应您需要的任何其他类型。