结构指针的元素指向C

时间:2020-08-24 15:23:52

标签: c pointers structure microchip xc16

我在C中具有用于电机控制应用程序的结构,该结构具有用于PID的元素。我创建了具有该结构的2个变量和指向这些变量的2个指针。我的应用程序是在微控制器上的,因此我还有一个对于PID的工作非常重要的寄存器,即编码器计数。 所以我想让我的指针指向它们各自的PID变量,但我想让元素“ Encoder”指向微控制器的编码器寄存器。这样,当我访问指针时,可以直接获取编码器位置。

typedef struct{
   int Error;
   int DeadBand;
   int SetPoint;
   int Encoder;
   .
   .
   .
   double Integral;
   double Derivative;
   double Kp;
   double Ki;
   double Kd;
   float Position;
   bool Done;
}Upid;

Upid PID1, PID2, *pPID1, *pPID2;
pPID1 = &PID1;
pPID2 = &PID2;
pPID1->Encoder = &POS1CNTL;
pPID2->Encoder = &POS2CNTL;

我没有尝试上面的代码,因为我100%不能按我想要的方式工作。取消引用编码器元素并分配编码器位置寄存器的地址,只需将地址号放入编码器元素中即可。它只是在这里显示我想要完成的事情。但是我不知道该怎么做。

在我希望能够调用函数而无需在函数本身中包含Encoder计数之后。

现在我做这样的事情:

void MovePosition(Upid* PID, int Acceleration, int MaxVelocity, int StartPosition, int EndPosition)
{
    PID->Acceleration = Acceleration;
    PID->MaxVelocity = MaxVelocity;
    PID->Position = PID->StartPos = StartPosition;
    PID->EndPos = EndPosition;
    PID->DeceleratonStarted = false;
    PID->VelocityMode = false;
    PID->Step = 0;
    PID->Done = false;
}

调用此函数时,我总是将当前的编码器计数(微控制器的编码器计数寄存器的值)放在StartPosition中。

我想做这样的事情:

void MovePosition(Upid* PID, int Acceleration, int MaxVelocity, int EndPosition)
{
    PID->Acceleration = Acceleration;
    PID->MaxVelocity = MaxVelocity;
    PID->Position = PID->StartPos = PID->Encoder;
    PID->EndPos = EndPosition;
    PID->DeceleratonStarted = false;
    PID->VelocityMode = false;
    PID->Step = 0;
    PID->Done = false;
}

所有内容都指向PID1或PID2变量,而元素编码器则指向微控制器的编码器计数寄存器。

我将如何做这样的事情? 谢谢。

编辑: 我将微芯片微控制器与XC16编译器配合使用。
我像普通变量一样使用POS1CNTL:
我可以这样看:A = POS1CNTL;
或者我可以像这样写一个值:POS1CNTL = 30;

POS1CNTL定义如下:
#define POS1CNTL POS1CNTL
extern volatile uint16_t POS1CNTL 属性((( sfr )));

0 个答案:

没有答案