2016-11-19 1 views
0

이것은 내 main.c 프로그램이며 "struct/union required"로 인해 빌드가 실패했습니다. 내가 그림 13f877a 마이크로 컨트롤러를 사용하고 있습니다. 누구든지이 빌드 실패의 이유를 말할 수 있다면 정말 대단 할 것입니다. 또한 "36.1 함수가 암시적인 int를 선언했습니다"라는 또 다른 경고가있었습니다. 그게 무슨 뜻 이죠?struct/union으로 인해 microC 빌드가 실패했습니다.

#include<htc.h> 
    #define _XTAL_FREQ 4000000 
    __CONFIG(0X3F39); 

    void main(){ 
     int a; 
     TRISB = 0b00010000;   //RB4 as Input PIN (ECHO) 
     TRISC = 0b00000000;   //C as Output PINs (LED) 
     T1CON = 0b00010000;   //Initialize Timer Module 

     while(1){ 
     TMR1H = 0;     //Sets the Initial Value of Timer 
     TMR1L = 0;     //Sets the Initial Value of Timer 
     PORTC = 0b00000000; 
     PORTB.F0 = 1;    //TRIGGER HIGH 
     Delay_us(10);    //10uS Delay 
     PORTB.F0 = 0;    //TRIGGER LOW 

     while(!PORTB.F4){   
      T1CON.F0 = 1; 
     }    
     while(PORTB.F4){    
      T1CON.F0 = 0;    
     } 

     a = (TMR1L | (TMR1H<<8)); //Reads Timer Value 
     a = a/58;     //Converts Time to Distance 
     a = a + 1;     //Distance Calibration 
     if(a>=2 && a<=400){ 
      //with in the range 
      PORTC = 0b11111111; 
     } else { 
      //out of range 
      PORTC = 0b00000000; 
     } 
     Delay_ms(400); 
     } 
    } 

Build C:\Users\user\Desktop\SmartDustbin for device 16F877A 
Using driver C:\Program Files (x86)\HI-TECH Software\PICC\9.81\bin\picc.exe 

Make: The target "C:\Users\user\Desktop\main.p1" is out of date. 
Executing: "C:\Program Files (x86)\HI-TECH Software\PICC\9.81\bin\picc.exe" --pass1 C:\Users\user\Desktop\main.c -q --chip=16F877A -P --runtime=default --opt=default -D__DEBUG=1 -g --asmlist "--errformat=Error [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s" 
Error [196] C:\Users\user\Desktop\main.c; 15.10 struct/union required 
Warning [361] C:\Users\user\Desktop\main.c; 16.1 function declared implicit int 
Error [196] C:\Users\user\Desktop\main.c; 17.10 struct/union required 
Error [196] C:\Users\user\Desktop\main.c; 19.16 struct/union required 
Error [196] C:\Users\user\Desktop\main.c; 20.10 struct/union required 
Error [196] C:\Users\user\Desktop\main.c; 22.15 struct/union required 
Error [196] C:\Users\user\Desktop\main.c; 23.10 struct/union required 
Warning [361] C:\Users\user\Desktop\main.c; 36.1 function declared implicit int 

********** Build failed! ********** 
+1

htc.h (또는 다른 포함 파일)의 포트 b 정의는 무엇입니까? 그것은 서명되지 않은 char 또는 PortBBits_t입니까? 서명되지 않은 char 인 경우 비트 및/또는 비트가 필요합니다. – cup

답변

2

당신은는 MicroC를 사용하는 것으로 주장하지만, 빌드 출력 명령 줄은 명확하게 당신이 실제로 오래된 마이크로 칩의 XC8로 대체 하이테크 C 9.81를 사용하고 보여줍니다. HI-Tech C는 MicroC처럼 구조체 멤버 였기 때문에 SFR의 단일 비트에 대한 액세스를 허용하지 않습니다. 전체 바이트로만 레지스터에 액세스 할 수 있으며 직접 비트 조작을 수행해야합니다. 예를 들어, 라인 :

PORTB.F0 = 1; 

가 될 필요가있을 것이다 :

그것은 필요한 위치에 1 개 비트를 이동 C에서 단일 비트를 설정하는 일반적인 방법이며, 또는 그것 뿐이다
PORTB |= (1 << 0); 

다른 비트를 변경하지 않고 대상 바이트에 넣습니다. 아직 이해가 안되면 C에서 비트 조작을위한 Google.

오류는 delay_usdelay_ms 함수가 선언되지 않았기 때문에 발생합니다. HI-tech C는 매크로의 __delay_ms__delay_us을 사용합니다. 또한 지연 매크로를 사용하기 전에 PIC의 작동 주파수를 Hz로 정의하여 _XTAL_FREQ을 정의해야합니다.

관련 문제