首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于需要结构/联合而导致microC生成失败

由于需要结构/联合而导致microC生成失败
EN

Stack Overflow用户
提问于 2016-11-19 04:43:13
回答 1查看 1.5K关注 0票数 0

这是我的main.c程序,由于"struct/union必需“而导致构建失败。我用的是pic 13f877a单片机。如果有人能告诉我这个构建失败的原因,我会非常高兴的。还有一个警告说"36.1函数声明为隐式int“。这也是什么意思?

代码语言:javascript
复制
#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! **********
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-20 13:00:46

您声称使用的是MicroC,但是构建输出中的命令行清楚地显示您实际上使用的是HI-TechC9.81,它已经过时,取而代之的是微芯片的XC8。高技术C不允许访问SFR中的单个位,如果它们是结构成员,就像MicroC一样。您只能以完整字节的形式访问寄存器,并且需要自己执行位操作。例如,行:

代码语言:javascript
复制
 PORTB.F0 = 1;   

将需要成为:

代码语言:javascript
复制
PORTB |= (1 << 0);

这是在C中设置单个比特的常见方法,它将1位移动到所需的位置,OR将其转换为目标字节,而不是更改其他位。如果你还不明白这一点的话,可以用谷歌在C语言中进行位操作。

function declared implicit int错误源于未声明函数delay_usdelay_ms。高科技C使用宏的__delay_ms__delay_us。此外,在使用延迟宏之前,您还需要使用_XTAL_FREQ的工作频率(以赫兹为单位)来定义PIC。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40689293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档