【发布时间】:2011-01-24 06:13:08
【问题描述】:
如何为指针分配特定的内存地址?
AVR m128 等微控制器中的特殊功能寄存器具有固定地址,AVR GCC 在 io.h 头文件中定义了 SFR,但我想自己处理。
【问题讨论】:
如何为指针分配特定的内存地址?
AVR m128 等微控制器中的特殊功能寄存器具有固定地址,AVR GCC 在 io.h 头文件中定义了 SFR,但我想自己处理。
【问题讨论】:
当然,没问题。您可以直接将其分配给变量:
volatile unsigned int *myPointer = (volatile unsigned int *)0x12345678;
我通常做的是声明一个内存映射 I/O 宏:
#define mmio32(x) (*(volatile unsigned long *)(x))
然后在头文件中定义我的寄存器:
#define SFR_BASE (0xCF800000)
#define SFR_1 (SFR_BASE + 0x0004)
#define SFR_2 (SFR_BASE + 0x0010)
然后使用它们:
unsigned long registerValue = mmio32(SFR_1); // read
mmio32(SFR2) = 0x85748312; // write
【讨论】:
volatile 通常是个好主意。
void 指针,那有什么用?