打印

MPLAB8.6编译怎么不通过?C语言

[复制链接]
5783|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qianlong30|  楼主 | 2010-12-29 15:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在一个工程中,一个文件
//定义0-9的显示代码

。。。。。。。
#include <pic.h>
#include <stdlib.h>
display_table1(a,data)         //------display_table.c的第45行   -
unsigned char a;            // a--- 8位二进制数 ;
unsigned char data[2];      //data[0]---高位显示码; data[1]---低位显示码
{
   。。。。。。。
}


另一个文件调用该文件的函数,首先外部函数声明:
extern display_table1();  //--------------------analyse1.c的第110行


编译不通过,显示错误如下:
Error   [1098] F:\display_table.c; 45. conflicting declarations for variable "_display_table1" (F:\analyse1.c:110)

我感觉是说函数的定义和调用文件中的外部函数声明有冲突。
怎么回事?望赐教。

相关帖子

沙发
mmax| | 2010-12-29 17:45 | 只看该作者
extern display_table1(unsigned char  a, unsigned char *data) ;

要定义参数。

使用特权

评论回复
板凳
mmax| | 2010-12-29 17:48 | 只看该作者
还有
display_table1(a,data)         //------display_table.c的第45行   -
unsigned char a;            // a--- 8位二进制数 ;
unsigned char data[2];      //data[0]---高位显示码; data[1]---低位显示码
{
   。。。。。。。
}
函数定义怪怪的。

要是我,我就:
void display_table1(unsigned char  a, unsigned char *data)
{
     //
}


extern void display_table1(unsigned char  a, unsigned char *data) ;

使用特权

评论回复
地板
yan3388764| | 2010-12-30 10:50 | 只看该作者
学习了!!!!

使用特权

评论回复
5
qianlong30|  楼主 | 2010-12-30 22:59 | 只看该作者
按上述修改后未再出现该错误,
接着出现如下错误:
Licensed for evaluation purposes only.
This licence will expire on Mon, 14 Feb 2011.
HI-TECH C Compiler for PIC10/12/16 MCUs (Lite Mode)  V9.80
Copyright (C) 2010 Microchip Technology Inc.
Error   [1347] ; 0. can't find 0xC2 words (0xc2 withtotal) for psect "text1186" in segment "CODE" (largest unused contiguous range 0x3C)
Error   [1347] ; 0. can't find 0xAA words (0xaa withtotal) for psect "text1156" in segment "CODE" (largest unused contiguous range 0x3C)
Error   [1347] ; 0. can't find 0xA3 words (0xa3 withtotal) for psect "text1155" in segment "CODE" (largest unused contiguous range 0x3C)
Error   [1347] ; 0. can't find 0x9E words (0x9e withtotal) for psect "text1166" in segment "CODE" (largest unused contiguous range 0x3C)
Error   [1347] ; 0. can't find 0x89 words (0x89 withtotal) for psect "text1174" in segment "CODE" (largest unused contiguous range 0x3C)
Error   [1347] ; 0. can't find 0x7B words (0x7b withtotal) for psect "text1164" in segment "CODE" (largest unused contiguous range 0x3C)
Error   [1347] ; 0. can't find 0x7B words (0x7b withtotal) for psect "text1183" in segment "CODE" (largest unused contiguous range 0x3C)

有30多个,什么问题?

使用特权

评论回复
6
mmax| | 2010-12-30 23:12 | 只看该作者
百度的结果:

我编译得到一个错误:Cant find XXX words/bytes in psect XXX
这意味着什么?

这个错误信息说明连接器不能够找到足够的ROM或RAM空间来适合你的程序。如果你在使用PICC编译器,错误信息里会告诉你它不能在某个Segment CODE里找到空间,那么这就意味着两种可能情况。要么是你的程序写得太大了,而你选定的单片机型号不能提供足够的ROM空间;或者是你有一个很大的函数,超过了一个PAGE大小的空间。PICC对函数的有一个严格限制,就是函数必须能在一个ROM PAGE里放得下。所以,如果你估计某个函数可能超过一个PAGE的话,可以考虑把这个大的函数分成两个或多个函数,这样就不会编译报错。你也可以通过产生一个汇编器列表文件(-asmlist),以及通过定位错误信息中的psect来确定究竟是哪个函数导致问题。

使用特权

评论回复
7
qianlong30|  楼主 | 2010-12-31 19:36 | 只看该作者
非常感谢MMAX,我一两年写不着一次程序,偶尔写一下,见笑。
我是这样的,有个程序用PICMATE2004,低版本的PICC,PIC16F877A写的C程序,确实很大,编译后用到95%ROM,程序运行使用都正常,现在想改用PIC16F887(成本低),所以我就在MICROCHIP上下载了MPLAB8.6(一并安装了该网站上的PICC9.6),重新建立工程,添加以前的C文件,已经改了一些887和877A的差别,现在编译就出了这种情况,887和877A的ROM一样大,PAGE也一样大,怎么能出现这种情况?
877A应得高奇晶园的那个PICMATE2004编译的,但它软件不升级,里面无法用887,所以才用MPLAB来重新编译。

使用特权

评论回复
8
lhkjg| | 2011-1-1 21:47 | 只看该作者
PIC的这个PICC编译器非常的烂,建议你可以考虑升级一下这个PICC软件

使用特权

评论回复
9
jianghehupo| | 2011-1-1 21:51 | 只看该作者
mplab8.6中自带的是picc9.8吧
楼上的,那个版本比较好用?

使用特权

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

本版积分规则

149

主题

349

帖子

2

粉丝