打印

C30编译遇到奇怪问题,问专家

[复制链接]
2014|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wxsjy|  楼主 | 2012-12-23 12:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C30编译遇到奇怪问题,问专家
我这次用的是dsPIC24FJ128GA010,项目容量肯定没有超过规定容量,在我的项目中,关于Uart1的主要内容如下:

Includes.h:
    #include "p24FJ128GA010.h"
     ......
    #include "Uart1.h"
    ......
//end of Includes.h



Uart1.h:
    #ifdef _UART1
      #define UART1_EXT
      #include "Uart1Const.h"
      UART1_EXT COMM_STRUCT U1St ;
      UART1_EXT COMM_STRUCT *RS232C1 = &U1St ;
      UART1_EXT  INT8U    Mdb0x10_WrOutputRegs(COMM_STRUCT  *PORTNAME) ;
      UART1_EXT  INT8U    Mdb0x0f_WrOutputCoils(COMM_STRUCT  *PORTNAME) ;
      UART1_EXT  INT8U    Mdb0x06_WrSglReg (COMM_STRUCT *PORTNAME)  ;
      UART1_EXT  INT8U    Mdb0x05_WrOutputCoil(COMM_STRUCT *PORTNAME) ;
      UART1_EXT  INT8U    Mdb0x04_RdInputRegs(COMM_STRUCT *PORTNAME) ;
      UART1_EXT  INT8U    Mdb0x03_RdOutputRegs(COMM_STRUCT *PORTNAME) ;
      UART1_EXT  INT8U    Mdb0x02_RdInputCoils(COMM_STRUCT *PORTNAME) ;
      UART1_EXT  INT8U    Mdb0x01_RdOutputCoils(COMM_STRUCT *PORTNAME) ;
      UART1_EXT  INT8U    TreatCmd(COMM_STRUCT  *PORTNAME)  ;
    #else
      #define UART1_EXT extern
      UART1_EXT COMM_STRUCT *RS232C1 ;
    #endif
    UART1_EXT  INT8U    RS232CRxTreat(COMM_STRUCT  *PORTNAME)    ;
//end of uart1.h



Uart1.c:
    #ifndef _UART1
    #define _UART1
    #endif
    #include "Includes.h"
    ......
    ......
    INT8U   Mdb0x01_RdOutputSglCoil(COMMSTRUCT *Prt)
      {
          ......
      }
    INT8U   Mdb0x02_RdInputSglCoil(COMMSTRUCT *Prt)
      {
          ......
      }

    INT8U   Mdb0x03_RdOutputRegs(COMMSTRUCT *Prt)
      {
        ......
      }

    INT8U   Mdb0x04_RdInputRegs(COMMSTRUCT *Prt)
      {
        ......
      }

    INT8U   Mdb0x05_WrOutputSglCoil(COMMSTRUCT *Prt)
      {
          ......
      }

    INT8U   Mdb0x06_WrOutputSglRegs(COMMSTRUCT *Prt)
      {
          ......
      }
    INT8U  Mdb0x0f_WrOutputMulCoils(COMMSTRUCT *Prt)
      {
           ......
      }
    INT8U  Mdb0x10_WrOutputMulRegs(COMMSTRUCT *Prt)
      {
        ......
      }
    INT8U   TreatCmd(COMMSTRUCT *Prt)
      {
           ......
          Mdb0x01_RdOutputSglCoil(MYPRT)  ;
          ......
          Mdb0x02_RdInputSglCoil(MYPRT)  ;
           ......
          Mdb0x03_RdOutputRegs(MYPRT)  ;
          ......
          Mdb0x04_RdInputRegs(MYPRT) ;
          ......
          Mdb0x05_WrOutputSglCoil(MYPRT) ;
          ......
          Mdb0x06_WrOutputSglRegs(MYPRT) ;
          ......
          Mdb0x0f_WrOutputMulCoils(MYPRT) ;
          .......
          Mdb0x10_WrOutputMulRegs(MYPRT)  ;
           ......
       }
      .......
     INT8U    RS232CRxTreat(COMM_STRUCT  *PORTNAME)
       {
         ......
         TreatCmd(MYPRT) ;
         ......

        }

// end of Uart1.c



  可是,在编译的时候,一直出现以下提示:


C_Sources\Uart1.C: In function 'TreatCmd':
C_Sources\Uart1.C:1865: warning: implicit declaration of function 'Mdb0x05_WrOutputSglCoil'
C_Sources\Uart1.C:1870: warning: implicit declaration of function 'Mdb0x06_WrOutputSglReg'
C_Sources\Uart1.C:1875: warning: implicit declaration of function 'Mdb0x0f_WrOutputMulCoils'
C_Sources\Uart1.C:1881: warning: implicit declaration of function 'Mdb0x10_WrOutputMulRegs'
......
: undefined reference to `_Mdb0x05_WrOutputSglCoil'
Uart1.o(.text+0x1870): In function `.LM997':
: undefined reference to `_Mdb0x06_WrOutputSglReg'
Uart1.o(.text+0x1878): In function `.LM999':
: undefined reference to `_Mdb0x0f_WrOutputMulCoils'
Uart1.o(.text+0x187e): In function `.LM1000':
: undefined reference to `_Mdb0x0f_WrOutputMulCoils'
Uart1.o(.text+0x1886): In function `.LM1002':
: undefined reference to `_Mdb0x10_WrOutputMulRegs'
......
    值得说明的是,这些个函数在本项目中只在此处被调用。
    实在想不通的是,在同一个Uart1.c文件里,还有那前几个被调用的函数,一点没事,郁闷至极。我知道问题肯定出在自己身上,可是,想了很多办法,无果,由于时间紧张和第一次使用C30,在此特请专家给诊断诊断。
  
  另一个C文件也出现类似的情况,可那个C文件不是我的,是PIC的。
  我现在用的IDE是MPLAB IDE V8.87,编译器是套装C30 V3.32,这个问题还有一个可能,是编译模式问题,可是,在IDE里,怎么也找不到大模式的选择,据C30用户手册说,缺省是小模式的。
  哎,这个问题耽误了我这么几天了,发句牢骚。用了这么多年的单片机和各种各样的IDE,感觉到,就PIC来讲,单片机是不错的,特别是有一整套叙述标准上最高水平的中文版手册,给用户提供了快速使用的基础,可是,IDE,它就不是主业啦,您看人家,KeilI 也好,IAR也好,那个才叫高水平高质量的IDE呢,你看,你连调试中“运行到光标”都给我省略了,你叫我怎么调试你?我现在在MPLAB V8.87中,居然连个大模式都不会选了,我白干这么多年单片机了我。郁闷。寄语尊敬的PIC,请您更上一层楼,在IDE上多点投入。出言不敬,还望海涵。

  另外,请专家帮我看看,下面的提示,是不是要增加什么头文件,是要增加什么头文件呢?

c:/program files/microchip/mplabc30/v3.31/bin/bin/../../lib\libpic30-elf.a(crt0_standard.o)(.init+0x1a): In function `L11':
: undefined reference to `_main'
c:/program files/microchip/mplabc30/v3.31/bin/bin/../../lib\libpic30-elf.a(crt0_standard.o)(.init+0x1c): In function `L11':
: undefined reference to `_main'

  急等!先谢!

沙发
wxsjy|  楼主 | 2012-12-24 09:10 | 只看该作者
自己顶上来找专家

使用特权

评论回复
板凳
yewuyi| | 2012-12-24 10:32 | 只看该作者
你首先要弄明白TreatCmd,Mdb0x05_WrOutputSglCoil等的原型函数在哪里?

在哪个文件中,你就在调用函数文件的开头包含它即可。

具体在哪个文件中,只能你自己去发现。

使用特权

评论回复
地板
wxsjy|  楼主 | 2012-12-24 23:26 | 只看该作者
感谢版主!你的估计是对的,是我把函数名给搞错了。结贴,谢谢。

使用特权

评论回复
5
yewuyi| | 2012-12-25 10:58 | 只看该作者
低级错误不应该发生和纠结。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

10

帖子

0

粉丝