如果您对微控制器进行了编程,您可能熟悉操作给定寄存器的选择位,或将一个字节写入整个事物。例如,在使用 C 的 PIC 上,我可以将整个字节写入 PORTA 以设置所有位,或者我可以简单地寻址 PORTAbits.RA# 以设置单个位。我试图模仿这些结构/联合的定义方式,这样我就可以对程序中的变量做同样的事情。具体来说,当微控制器打开时,我希望能够重置我自己定义的寄存器,例如
REGISTER = 0;
相对
REGISTERbits.BIT0 = 0;
REGISTERbits.BIT1 = 0;
...
//or
REGISTERbits = (0,0,0,0,0,0,0,0);
等等
显然前者更加优雅,节省了大量的行空间。微控制器的头文件是这样的:
#ifndef __18F2550_H
#define __18F2550_H
....
extern volatile near unsigned char LATA;
extern volatile near struct {
unsigned LATA0:1;
unsigned LATA1:1;
unsigned LATA2:1;
unsigned LATA3:1;
unsigned LATA4:1;
unsigned LATA5:1;
unsigned LATA6:1;
} LATAbits;
...对于每个寄存器,并且具有多个字节的寄存器使用结构的联合作为其寄存器位。由于我的初始化/声明位于主源文件而不是标题中,因此我已将 extern 删除并靠近我的:
volatile unsigned char InReg;
volatile struct{
unsigned NSENS:1; //One magnetic sensor per direction
unsigned SSENS:1;
unsigned ESENS:1;
unsigned WSENS:1;
unsigned YBTN:1; //One crosswalk button input per axis
unsigned XBTN:1; //(4 buttons tied together each)
unsigned :2;
} InRegbits;
...但是在编译时,InReg 和 InRegbits 被定义为内存中的两个独立位置,这意味着我无法写入 InReg 来更改 InRegbits。如何更改它以使其正常工作?我要复制的那个是不是因为它是一个特殊的微控制器寄存器才起作用?
谢谢你的帮助