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'
急等!先谢!
|