指向特定固定地址的指针

Pet*_*uke 13 c pointers

如何为指针分配特定的内存地址?

微控制器中的特殊功能寄存器如AVR m128具有固定地址,AVR GCC在io.h头文件中定义了SFR,但我想自己处理它.

Car*_*rum 31

好没问题.您可以直接将其分配给变量:

volatile unsigned int *myPointer = (volatile unsigned int *)0x12345678;
Run Code Online (Sandbox Code Playgroud)

我通常做的是声明一个内存映射的I/O宏:

#define mmio32(x)   (*(volatile unsigned long *)(x))
Run Code Online (Sandbox Code Playgroud)

然后在头文件中定义我的寄存器:

#define SFR_BASE    (0xCF800000)
#define SFR_1       (SFR_BASE + 0x0004)
#define SFR_2       (SFR_BASE + 0x0010)
Run Code Online (Sandbox Code Playgroud)

然后使用它们:

unsigned long registerValue = mmio32(SFR_1); // read
mmio32(SFR2) = 0x85748312;                   // write
Run Code Online (Sandbox Code Playgroud)

  • 我会使用通用的void指针,除非该位置的数据是unsigned int. (2认同)
  • 将内存映射 I/O 地址声明为“易失性”通常是个好主意。 (2认同)