不是结构/联合的成员.我似乎找不出错误出现的原因

  • 本文关键字:出错 错误 结构 成员 c
  • 更新时间 :
  • 英文 :


我很难弄清楚为什么我一直出现这个错误。代码/项目的目的是获取模拟值并将其转换为代表温度传感器的数字值。此外,我有BCD开关,但一旦我显示代码,就会很清楚这可能是一些小错误或语法,但我找不到它。感谢您的帮助。

这是错误消息:

Error at file ../main.c line 100 column 45: (255) not a member of the struct/union ""
Error at file ../main.c line 100 column 48: (182) illegal conversion between types
int -> volatile union S380
Error at file ../main.c line 101 column 45: (255) not a member of the struct/union ""
Error at file ../main.c line 101 column 48: (182) illegal conversion between types
make: *** [main.p1] Error 1
int -> volatile union S380

这就是出现错误的地方。

void main(void){
InitPorts();
InitADC();
while(1){
int SetTemp = Bcd_SW_AB (Read_SwitchB(), Read_SwitchA());
DispTemp(Rd_ADC());
if(Rd_ADC() < (SetTemp - 1)){RLED = 1;}
if(Rd_ADC() > (SetTemp + 1)){RLED = 0;}
}
}

[Error at file ../main.c line 100 column 45: (255) not a member of the struct/union ""]   
if(Rd_ADC() < (SetTemp - 1)){RLED = 1;}

[ Error at file ../main.c line 101 column 45: (255) not a member of the struct/union ""]   
if(Rd_ADC() > (SetTemp + 1)){RLED = 0;}

这是完整的代码:

#include <xc.h>
#define RLED LATCbits.LATA0
#define GLED LATCbits.LATA1
//Defining pins on bcd switch A
#define a1 PORTBbits.RB0
#define a2 PORTBbits.RB1
#define a4 PORTBbits.RB2
#define a8 PORTBbits.RB3
//Defining pins on bcd switch B
#define b1 PORTBbits.RB4
#define b2 PORTBbits.RB5
#define b4 PORTBbits.RB6
#define b8 PORTBbits.RB7
void InitPorts(void){
ANSA0 = 1;        // Set pin to analog
TRISA0 = 1;       // Set pin to input
ANSELB = 0;   // Set Port B to digital
TRISB = 1;        // Set port B to input
ANSELC = 0 ;  // Set Port C to digital
TRISC = 0;        // Set Pins to output
ANSD0 = 0;        //Set pin to digital
TRISD0 = 0;       //Set pin to output
ANSD1 = 0;        //Set pin to digital
TRISD1 = 0;       //Set pin to output
}
void InitADC (void){
ADCON0bits.CHS = 0; //Channel 0
ADCON1bits.PVCFG = 0; //+Vref = Vdd
ADCON1bits.NVCFG = 0; //-Vref = Vss
ADCON2bits.ADFM = 1; //10-bit operation
ADCON2bits.ACQT = 0b0000010; //4 Tad
ADCON2bits.ADCS = 7; //Frc
ADCON0bits.ADON = 1; //Osc = on 
}
int Rd_ADC(void){
int Result;
ADCON0bits.GODONE = 1;
while (ADCON0bits.GODONE);
Result =(((ADRESH <<6) | (ADRESL>>2))/2.56);
return Result;
}
void DispTemp( int BinVal){
int Bcd[2];
Bcd[0] = BinVal %10;
BinVal /= 10;
Bcd[1] = BinVal % 10;
BinVal /= 10;
LATC = Bcd[0];
LATCbits.LATC4 = 1;
LATCbits.LATC4 = 0;
LATC = Bcd[1];
LATCbits.LATC5 = 1;
LATCbits.LATC5 = 0;
}
int Read_SwitchA(void){
int total = 0;
if (a1) {total+=1;}
if (a2) {total+=2;}
if (a4) {total+=4;}
if (a8) {total+=8;}
return total;
}
int Read_SwitchB(void){
int total = 0;
if (b1) {total+=1;}
if (b2) {total+=2;}
if (b4) {total+=4;}
if (b8) {total+=8;}
return total*10;
}
int Bcd_SW_AB(int Read_SwitchB, int Read_SwitchA){
int total = Read_SwitchB + Read_SwitchA;
return total;
}
void main(void){
InitPorts();
InitADC();
while(1){
int SetTemp = Bcd_SW_AB (Read_SwitchB(), Read_SwitchA());
DispTemp(Rd_ADC());
if(Rd_ADC() < (SetTemp - 1)){RLED = 1;}
if(Rd_ADC() > (SetTemp + 1)){RLED = 0;}
}
}

参考这个宏定义。。。

#define RLED LATCbits.LATA0

,此错误。。。

文件中出现错误/main.c第100行第45列:(255(不是结构/联合"的成员">

。。。引用这行代码。。。

if(Rd_ADC() < (SetTemp - 1)){RLED = 1;}

。。。似乎在说LATCbits的类型是不具有任何名为LATA0的成员的未标记结构或并集类型。

有可能的是;非法转换";错误只是从";不是会员";错误,因此它们不表示单独的问题。

谢谢大家,我发现了错误。感谢@ryyker让我知道我应该重新检查我的拼写,也感谢@jabberwocky把我的注意力放在LATCbits上,哪里可以打错字。

所以LATCbits是pic微控制器上的一个寄存器,我最初将LED定义为在LATC上,后来将其更改为在LATD上,从未更改过我的代码。

这是必须改变的部分:

形成这个(错误的(:

#define RLED LATCbits.LATA0
#define GLED LATCbits.LATA1

对此(正确(:

#define RLED LATDbits.LATD0
#define GLED LATDbits.LATD1

对于任何你想看到正确代码的人:

#include <xc.h>
#define RLED LATDbits.LATD0
#define GLED LATDbits.LATD1
//Defining pins on bcd switch A
#define a1 PORTBbits.RB0
#define a2 PORTBbits.RB1
#define a4 PORTBbits.RB2
#define a8 PORTBbits.RB3
//Defining pins on bcd switch B
#define b1 PORTBbits.RB4
#define b2 PORTBbits.RB5
#define b4 PORTBbits.RB6
#define b8 PORTBbits.RB7
void InitPorts(void){
ANSA0 = 1;      // Set pin to analog
TRISA0 = 1;     // Set pin to input
ANSELB = 0; // Set Port B to digital
TRISB = 1;      // Set port B to input
ANSELC = 0 ;    // Set Port C to digital
TRISC = 0;      // Set Pins to output
ANSD0 = 0;      //Set pin to digital
TRISD0 = 0;     //Set pin to output
ANSD1 = 0;      //Set pin to digital
TRISD1 = 0;     //Set pin to output
}
void InitADC (void){
ADCON0bits.CHS = 0; //Channel 0
ADCON1bits.PVCFG = 0; //+Vref = Vdd
ADCON1bits.NVCFG = 0; //-Vref = Vss
ADCON2bits.ADFM = 1; //10-bit operation
ADCON2bits.ACQT = 0b0000010; //4 Tad
ADCON2bits.ADCS = 7; //Frc
ADCON0bits.ADON = 1; //Osc = on 
}
int Rd_ADC(void){
int Result;
ADCON0bits.GODONE = 1;
while (ADCON0bits.GODONE);
Result =(((ADRESH <<6) | (ADRESL>>2))/2.56);
return Result;
}
void DispTemp( int BinVal){
int Bcd[2];
Bcd[0] = BinVal %10;
BinVal /= 10;
Bcd[1] = BinVal % 10;
BinVal /= 10;
LATC = Bcd[0];
LATCbits.LATC4 = 1;
LATCbits.LATC4 = 0;
LATC = Bcd[1];
LATCbits.LATC5 = 1;
LATCbits.LATC5 = 0;
}
int Read_SwitchA(void){
int total = 0;
if (a1) {total+=1;}
if (a2) {total+=2;}
if (a4) {total+=4;}
if (a8) {total+=8;}
return total;
}
int Read_SwitchB(void){
int total = 0;
if (b1) {total+=1;}
if (b2) {total+=2;}
if (b4) {total+=4;}
if (b8) {total+=8;}
return total*10;
}
int Bcd_SW_AB(int Read_SwitchB, int Read_SwitchA){
int total = Read_SwitchB + Read_SwitchA;
return total;
}
void main(void){
InitPorts();
InitADC();
while(1){
int SetTemp = Bcd_SW_AB (Read_SwitchB(), Read_SwitchA());
DispTemp(Rd_ADC());
if(Rd_ADC() < (SetTemp - 1)){RLED = 1;}
if(Rd_ADC() > (SetTemp + 1)){RLED = 0;}
}
}

相关内容

最新更新