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