对于上下文,我在启动板开发板上使用mspgcc
和。msp430g2553
我想创建一个可以指向各种硬件寄存器的指针。标准头文件通过如下语句提供对寄存器的访问:
P1DIR &= 0x08;
以上是端口 1 gpio 引脚的方向寄存器。 P1DIR
是一个 8 位硬件寄存器。
我尝试分配一个可用于修改它的指针如下:
volatile unsigned char *reg;
reg = (unsigned char *) &P1DIR;
这不会通过 gcc 生成任何错误或警告,但是它不起作用。当使用 gdb 测试值时,reg 包含值0xFFFF
而不是数据表中所述的0x0022
(address of )。P1DIR
以下是标题中有助于解决问题的行:
/* External references resolved by a device-specific linker command file */
#define SFR_8BIT(address) extern volatile unsigned char address
...
SFR_8BIT(P1DIR); /* Port 1 Direction */
据我所知,链接器使用一个名为periph.x
(位于/usr/local/msp430-uniarch-20110716/msp430/lib/ldscripts/msp430g2553
)的文件,其中包含以下行:
__P1DIR = 0x0022;