如何遍历相邻的 PIC 微控制器寄存器?

How do I iterate over adjacent PIC microcontroller registers?

我正在为 PIC18F45K80 微控制器编写应用程序。我想从八个 RXB1D 寄存器中检索字节。根据数据表,“每个接收缓冲区都有一个寄存器数组。”另外,研究定义发现8个寄存器都是连续的内存地址,就像一个数组。

遍历这些寄存器的正确语法是什么?

我试过for (i = 0; i < len; i++) databuf[i] = RXB1D0[i];,但是编译器returnserror: subscripted value is not an array, pointer, or vector,并指向RXB1D0标识符。

我不鼓励你这样做,因为 PIC 使用硬件架构,并且在某些区域通过指针访问内存可能无法工作,因为它需要特殊的汇编指令。他们只有 8 个,所以我会这样做:

#define GETREG(b, i) (b)[i] = RXB1D ## i
#define GETREGS(b) do {GETREG(b,0);GETREG(b,1);GETREG(b,2);GETREG(b,3);\
                       GETREG(b,4);GETREG(b,5);GETREG(b,6);GETREG(b,7);}while(0)

和用法:

void foo()
{
    char databuff[8];
    GETREGS(databuff);
}

每次读取都会编译成两条汇编指令。即使你找到了使用指针循环的方法,它也会导致更多的指令。