0

これは私の main.c プログラムで、「struct/union required」が原因でビルドに失敗しました。pic 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! **********
4

1 に答える 1

2

MicroC を使用していると主張していますが、ビルド出力のコマンド ラインは、実際には HI-Tech C 9.81 を使用していることを明確に示しています。これは古く、Microchip の XC8 に置き換えられています。HI-Tech C は、MicroC のように、SFR の単一ビットへのアクセスを、それらが構造体メンバーであるかのように許可しません。レジスタにはフル バイトとしてのみアクセスでき、自分でビット操作を実行する必要があります。たとえば、次の行です。

 PORTB.F0 = 1;   

次のようになる必要があります。

PORTB |= (1 << 0);

これは、C で単一ビットを設定する一般的な方法です。1 ビットを必要な位置にシフトし、それを目的のバイトに OR 演算します。他のビットは変更しません。これをまだ理解していない場合は、C でのビット操作について Google で調べてください。

エラーは、関数とが宣言されていないfunction declared implicit intことに起因します。HI-tech C は、マクロのと を 使用します。さらに、遅延マクロを使用する前に、PIC の動作周波数を Hz で定義する必要があります。delay_usdelay_ms__delay_ms__delay_us_XTAL_FREQ

于 2016-11-20T13:00:46.697 に答える