Сбой сборки microC из-за структуры / объединения

Это моя программа main.c и произошла ошибка сборки из-за "struct/union required". Я использую рис 13f877a микроконтроллер. Я буду очень признателен, если кто-нибудь может сказать мне причину этого сбоя сборки. Также было еще одно предупреждение: "36.1 функция объявлена ​​неявной int". что это значит тоже?

#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 ответ

Решение

Вы заявляете, что используете MicroC, но командная строка в результатах сборки ясно показывает, что вы на самом деле используете HI-Tech C 9.81, который устарел и заменен на MicroCip XC8. HI-Tech C не разрешает доступ к отдельным битам в SFR, поскольку они были членами структуры, как это делает MicroC. Вы можете получить доступ к регистрам только как полный байт, и вам нужно выполнять битовые манипуляции самостоятельно. Например, строка:

 PORTB.F0 = 1;   

Нужно было бы стать:

PORTB |= (1 << 0);

Что является обычным способом установки одного бита в C. Он сдвигает 1 бит в требуемую позицию и переводит ИЛИ в байт назначения, не изменяя другие биты. Google для бит манипуляции в C, если вы еще не понимаете этого.

function declared implicit int ошибки связаны с тем, что функции delay_us а также delay_ms не объявлены. Привет-Tech C использует макрос __delay_ms а также __delay_us, Кроме того, вам нужно будет определить _XTAL_FREQ с рабочей частотой вашего PIC в Гц до использования макроса задержки.

Другие вопросы по тегам