TI中文支持网
TI专业的中文技术问题搜集分享网站

关于symbol _eQEP is defined multiple times的问题

CONTROLSUIT里的f2833xdrvlib.h与TI的例程DSP2833x_EPwm.h,DSP2833x_EQep.h,DSP2833x_ECap.h是不是冲突?

为什么在程序中同时include以上4个头文件会出现以下错误:

<Linking>
>> error: symbol _eQEP is defined multiple times:
C:\\CCStudio_v3.3\\MyProjects\\svpwm\\Debug\\DSP2833x_DefaultIsr.obj and C:\\CCStudio_v3.3\\MyProjects\\svpwm\\Debug\\svpwmmain.obj

>> error: symbol _eCAP is defined multiple times:
C:\\CCStudio_v3.3\\MyProjects\\svpwm\\Debug\\DSP2833x_DefaultIsr.obj and C:\\CCStudio_v3.3\\MyProjects\\svpwm\\Debug\\svpwmmain.obj

>> error: symbol _ePWM is defined multiple times:
C:\\CCStudio_v3.3\\MyProjects\\svpwm\\Debug\\DSP2833x_DefaultIsr.obj and C:\\CCStudio_v3.3\\MyProjects\\svpwm\\Debug\\svpwmmain.obj

Aiyao Wang:

楼主是参考CONTROLSUIT里的例程和宏写PMSM的FOC控制程序。

DSP2833x_EPwm.h中定义了结构EPWM_REGS声明了6个此结构的外部变量EPwmxRegs:

struct EPWM_REGS { union TBCTL_REG TBCTL; // union TBSTS_REG TBSTS; // union TBPHS_HRPWM_GROUP TBPHS; // Union of TBPHS:TBPHSHR Uint16 TBCTR; // Counter Uint16 TBPRD; // Period register set Uint16 rsvd1; // union CMPCTL_REG CMPCTL; // Compare control union CMPA_HRPWM_GROUP CMPA; // Union of CMPA:CMPAHR Uint16 CMPB; // Compare B reg union AQCTL_REG AQCTLA; // Action qual output A union AQCTL_REG AQCTLB; // Action qual output B union AQSFRC_REG AQSFRC; // Action qual SW force union AQCSFRC_REG AQCSFRC; // Action qualifier continuous SW force union DBCTL_REG DBCTL; // Dead-band control Uint16 DBRED; // Dead-band rising edge delay Uint16 DBFED; // Dead-band falling edge delay union TZSEL_REG TZSEL; // Trip zone select Uint16 rsvd2; union TZCTL_REG TZCTL; // Trip zone control union TZEINT_REG TZEINT; // Trip zone interrupt enable union TZFLG_REG TZFLG; // Trip zone interrupt flags union TZCLR_REG TZCLR; // Trip zone clear union TZFRC_REG TZFRC; // Trip zone force interrupt union ETSEL_REG ETSEL; // Event trigger selection union ETPS_REG ETPS; // Event trigger pre-scaler union ETFLG_REG ETFLG; // Event trigger flags union ETCLR_REG ETCLR; // Event trigger clear union ETFRC_REG ETFRC; // Event trigger force union PCCTL_REG PCCTL; // PWM chopper control Uint16 rsvd3; // union HRCNFG_REG HRCNFG; // HRPWM Config Reg};

//—————————————————————————// External References & Function Declarations://extern volatile struct EPWM_REGS EPwm1Regs;extern volatile struct EPWM_REGS EPwm2Regs;extern volatile struct EPWM_REGS EPwm3Regs;extern volatile struct EPWM_REGS EPwm4Regs;extern volatile struct EPWM_REGS EPwm5Regs;extern volatile struct EPWM_REGS EPwm6Regs;

DSP2833x_GlobalVariableDefs.c中定义了6个EPWM_REGS结构变量EPwmxRegs:

#ifdef __cplusplus#pragma DATA_SECTION("EPwm1RegsFile")#else#pragma DATA_SECTION(EPwm1Regs,"EPwm1RegsFile");#endifvolatile struct EPWM_REGS EPwm1Regs;

……

f2833xdrvlib.h中定义了指向结构EPWM_REGS类型的 变量的指针*ePWM

volatile struct EPWM_REGS *ePWM[] = { &EPwm1Regs, //intentional: (ePWM[0] not used) &EPwm1Regs, &EPwm2Regs, &EPwm3Regs, &EPwm4Regs, &EPwm5Regs, &EPwm6Regs, };

编译的Linking阶段出现>> error: symbol _ePWM is defined multiple times:这样的错误。

发现在f2833xpwm.h中正是中用*ePWM这个指针代替EPwm1Regs来设置寄存器的。因为error是因为f2833xpwm.h引用了f2833xdrvlib.h之后引起的,为了消除error,干脆去掉这个指针,不再引用f2833xdrvlib.h。

比如在PWM_INIT_MACRO(v)中将

(*ePWM[ch1]).TBCTL.bit.SYNCOSEL = 0; /* Pass through*/ \ (*ePWM[ch2]).TBCTL.bit.SYNCOSEL = 0; /* Pass through*/ \ (*ePWM[ch3]).TBCTL.bit.SYNCOSEL = 0; /* Pass through*/

改为

EPwm1Regs.TBCTL.bit.SYNCOSEL = 0; /* Pass through*/ \ EPwm2Regs.TBCTL.bit.SYNCOSEL = 0; /* Pass through*/ \ EPwm3Regs.TBCTL.bit.SYNCOSEL = 0; /* Pass through*/

这样,编译后errors消除。

但是!依然不太清楚>> error: symbol _ePWM is defined multiple times这个错误出在哪。说多次定义了ePWM,但好像语法上也没有多次定义啊?

求大神指点!

CONTROLSUIT里的f2833xdrvlib.h与TI的例程DSP2833x_EPwm.h,DSP2833x_EQep.h,DSP2833x_ECap.h是不是冲突?

为什么在程序中同时include以上4个头文件会出现以下错误:

<Linking>
>> error: symbol _eQEP is defined multiple times:
C:\\CCStudio_v3.3\\MyProjects\\svpwm\\Debug\\DSP2833x_DefaultIsr.obj and C:\\CCStudio_v3.3\\MyProjects\\svpwm\\Debug\\svpwmmain.obj

>> error: symbol _eCAP is defined multiple times:
C:\\CCStudio_v3.3\\MyProjects\\svpwm\\Debug\\DSP2833x_DefaultIsr.obj and C:\\CCStudio_v3.3\\MyProjects\\svpwm\\Debug\\svpwmmain.obj

>> error: symbol _ePWM is defined multiple times:
C:\\CCStudio_v3.3\\MyProjects\\svpwm\\Debug\\DSP2833x_DefaultIsr.obj and C:\\CCStudio_v3.3\\MyProjects\\svpwm\\Debug\\svpwmmain.obj

Eric Ma:

Aiyao,

从错误的信息上看,重定义冲突是在DefaultIsr.c及svpwmmain.c中,还是需要检查这两个文件是否包含了相同的eQEP,eCAP等的定义。

Eric

CONTROLSUIT里的f2833xdrvlib.h与TI的例程DSP2833x_EPwm.h,DSP2833x_EQep.h,DSP2833x_ECap.h是不是冲突?

为什么在程序中同时include以上4个头文件会出现以下错误:

<Linking>
>> error: symbol _eQEP is defined multiple times:
C:\\CCStudio_v3.3\\MyProjects\\svpwm\\Debug\\DSP2833x_DefaultIsr.obj and C:\\CCStudio_v3.3\\MyProjects\\svpwm\\Debug\\svpwmmain.obj

>> error: symbol _eCAP is defined multiple times:
C:\\CCStudio_v3.3\\MyProjects\\svpwm\\Debug\\DSP2833x_DefaultIsr.obj and C:\\CCStudio_v3.3\\MyProjects\\svpwm\\Debug\\svpwmmain.obj

>> error: symbol _ePWM is defined multiple times:
C:\\CCStudio_v3.3\\MyProjects\\svpwm\\Debug\\DSP2833x_DefaultIsr.obj and C:\\CCStudio_v3.3\\MyProjects\\svpwm\\Debug\\svpwmmain.obj

Aiyao Wang:

回复 Eric Ma:

你好!

DefaultIsr.c及svpwmmain.c两个文件没有包含eQEP,eCAP的定义。正是因为引用了头文件f2833xpwm(f2833xdrvlib.h),DSP2833x_EPwm.h,DSP2833x_EQep.h,DSP2833x_ECap.h才出现多次定义的错误。

比如我新建一个.c文件,引用这几个头文件,还是会报错。

赞(0)
未经允许不得转载:TI中文支持网 » 关于symbol _eQEP is defined multiple times的问题
分享到: 更多 (0)