[英]microC build failure due to struct/union required
這是我的main.c程序,由於“需要結構/聯合”而導致構建失敗。 我正在使用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! **********
您聲稱使用的是MicroC,但是在構建輸出中的命令行清楚地表明您實際上在使用HI-Tech C 9.81,該版本已過時並已由Microchip的XC8取代。 HI-Tech C不允許像MicroC一樣訪問SFR中的單個位,就像它們是結構成員一樣。 您只能以完整字節的形式訪問寄存器,並且需要自己執行位操作。 例如,該行:
PORTB.F0 = 1;
需要成為:
PORTB |= (1 << 0);
這是在C中設置一位的常見方法。它將一位移至所需位置,然后對其進行“或”運算到目標字節,而不更改其他位。 如果您還不了解,請在C中使用Google進行位操作。
該function declared implicit int
錯誤的事實,職能干delay_us
和delay_ms
沒有聲明。 HI-C使用宏的__delay_ms
和__delay_us
。 此外,在使用延遲宏之前,您需要使用PIC的工作頻率(以Hz為單位)定義_XTAL_FREQ
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.