最近在看一个controlSUITE中DPS workshop中的一个例子,其中有一段变量定义的代码不理解:
// Used to indirectly access all EPWM modules
volatile struct EPWM_REGS *ePWM[] =
{ &EPwm1Regs, //intentional: (ePWM[0] not used)
&EPwm1Regs,
&EPwm2Regs,
&EPwm3Regs,
&EPwm4Regs,
#if (!DSP2802x_DEVICE_H)
&EPwm5Regs,
&EPwm6Regs,
#if (DSP2803x_DEVICE_H || DSP2804x_DEVICE_H)
&EPwm7Regs,
#if (DSP2804x_DEVICE_H)
&EPwm8Regs
#endif
#endif
#endif
};
我的理解是他定义了一个结构体指针数组,后面的代码中确实也用到了:
void C1(void) // Fault Management
//——————————————————
{
if (ClearFault1 == 1)
{
EALLOW;
(*ePWM[1]).TZCLR.bit.OST = 1;
EDIS; ClearFault1 = 0;
}
if (ClearFault2 == 1)
{
EALLOW;
(*ePWM[2]).TZCLR.bit.OST = 1;
EDIS; ClearFault2 = 0;
} if ( (*ePWM[1]).TZFLG.bit.OST == 1 )
FaultFlg1 = 1; else FaultFlg1 = 0;
if ( (*ePWM[2]).TZFLG.bit.OST == 1 )
FaultFlg2 = 1; else FaultFlg2 = 0;
//—————–
//the next time CpuTimer2 'counter' reaches Period value go to C2
C_Task_Ptr = &C2; //—————–
}
我不明白的是 程序上为什么这么写?
(*ePWM[1]).TZCLR.bit.OST = 1;写成EPwm1Regs.TZCLR.bit.OST = 1; 应该也可以吧?
mangui zhang:
你是不是以前做过c28X系列?
程序编写考虑了很多因素 兼容更多的型号
重点还是要看你的DEVICE_H 选择的是哪个系列