常量表格编译的错误,谢谢大家帮助

[复制链接]
3293|4
 楼主| neaphy 发表于 2007-12-3 23:32 | 显示全部楼层 |阅读模式
编译器是PICC<br />程序有点大,分模块写的,编译时CRC校验定义的表格有问题,帖一下相关的:<br /><br />/****************&nbsp;&nbsp;&nbsp;CRC.h&nbsp;&nbsp;**************************/<br /><br />#ifdef&nbsp;CRC_GLOBALS<br />&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;CRC_EXT<br />#else<br />&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;CRC_EXT&nbsp;extern<br />#endif<br /><br />CRC_EXT&nbsp;const&nbsp;uchar&nbsp;CRCHi[256]={....};&nbsp;//数据省略<br />CRC_EXT&nbsp;const&nbsp;uchar&nbsp;CRCLo[256]={....};<br /><br />CRC_EXT&nbsp;uint&nbsp;CRC16(bank2&nbsp;uchar&nbsp;*puchMsg,&nbsp;uchar&nbsp;usDataLen&nbsp;);<br /><br />/******************************************************/<br /><br />/********************&nbsp;CRC.c&nbsp;***************************/<br />/****************就是个CRC校验的函数没什么说的*********/<br />#define&nbsp;CRC_GLOBALS<br />#include&quot;includes.h&quot;&nbsp;&nbsp;//这个文件已经包含了CRC.h<br />uint&nbsp;CRC16(bank2&nbsp;uchar&nbsp;*puchMsg,&nbsp;uchar&nbsp;usDataLen&nbsp;)&nbsp;/*&nbsp;The&nbsp;function&nbsp;returns&nbsp;the&nbsp;CRC&nbsp;as&nbsp;a&nbsp;unsigned&nbsp;short&nbsp;type&nbsp;*/<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;uchCRCHi=0xFF;&nbsp;/*&nbsp;high&nbsp;byte&nbsp;of&nbsp;CRC&nbsp;initialized&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;uchCRCLo=0xFF;&nbsp;/*&nbsp;low&nbsp;byte&nbsp;of&nbsp;CRC&nbsp;initialized&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;uint&nbsp;uIndex;&nbsp;/*&nbsp;will&nbsp;index&nbsp;into&nbsp;CRC&nbsp;lookup&nbsp;table&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;uchar&nbsp;*PHi;<br />&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;uchar&nbsp;*PLo;<br />&nbsp;&nbsp;&nbsp;&nbsp;PHi=CRCHi;<br />&nbsp;&nbsp;&nbsp;&nbsp;PLo=CRCLo;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(usDataLen--)&nbsp;/*&nbsp;pass&nbsp;through&nbsp;message&nbsp;buffer&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uIndex=uchCRCLo^(*puchMsg++);&nbsp;/*&nbsp;calculate&nbsp;the&nbsp;CRC&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//uchCRCLo=uchCRCHi^CRCHi[uIndex];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uchCRCLo=uchCRCHi^(*(PHi+uIndex));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//uchCRCHi=CRCLo[uIndex];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uchCRCHi=*(PLo+uIndex);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(uchCRCHi&lt&lt8|uchCRCLo);<br />}<br /><br />/**************************************************************/<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我在另外两个.C模块中调用上面CRC校验函数<br />/*********************&nbsp;&nbsp;RTU.c&nbsp;&nbsp;*********************************/<br />#define&nbsp;RTU_GLOBALS<br />#include&quot;includes.h&quot;<br />....<br />void&nbsp;RTUReceive(void)<br />{<br />&nbsp;&nbsp;....<br />&nbsp;&nbsp;CRCTmp1=CRC16(ptr1,&nbsp;DataLen1&nbsp;);<br />&nbsp;&nbsp;....<br />&nbsp;&nbsp;<br />}<br />....<br />/******************************************************************/<br /><br /><br />/*************************&nbsp;&nbsp;RTUSlave.c&nbsp;&nbsp;**************************/<br />#define&nbsp;RTUSlave_GLOBALS<br />#include&quot;includes.h&quot;<br />...<br />void&nbsp;RepuCheck(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;....<br />&nbsp;&nbsp;&nbsp;&nbsp;CRCTmp2=CRC16(ptr2,&nbsp;DataLen2&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;....<br />}<br />...<br />/*******************************************************************/<br /><br /><br />就在这两个地方用了,因为我原来在51单片机上写没什么问题的,可是在pic上编译有问题,我用pic16f877a&nbsp;:<br />Error&nbsp;&nbsp;&nbsp;[482]&nbsp;;&nbsp;.&nbsp;symbol&nbsp;&quot;_CRCHi&quot;&nbsp;is&nbsp;defined&nbsp;more&nbsp;than&nbsp;once&nbsp;in&nbsp;&quot;ApplMain.obj&quot;<br />Error&nbsp;&nbsp;&nbsp;[482]&nbsp;;&nbsp;.&nbsp;symbol&nbsp;&quot;_CRCLo&quot;&nbsp;is&nbsp;defined&nbsp;more&nbsp;than&nbsp;once&nbsp;in&nbsp;&quot;ApplMain.obj&quot;<br />Error&nbsp;&nbsp;&nbsp;[482]&nbsp;;&nbsp;.&nbsp;symbol&nbsp;&quot;_CRCHi&quot;&nbsp;is&nbsp;defined&nbsp;more&nbsp;than&nbsp;once&nbsp;in&nbsp;&quot;ApplMain.obj&quot;<br />Error&nbsp;&nbsp;&nbsp;[482]&nbsp;;&nbsp;.&nbsp;symbol&nbsp;&quot;_CRCLo&quot;&nbsp;is&nbsp;defined&nbsp;more&nbsp;than&nbsp;once&nbsp;in&nbsp;&quot;ApplMain.obj&quot;<br />Error&nbsp;&nbsp;&nbsp;[482]&nbsp;;&nbsp;.&nbsp;symbol&nbsp;&quot;_CRCHi&quot;&nbsp;is&nbsp;defined&nbsp;more&nbsp;than&nbsp;once&nbsp;in&nbsp;&quot;ApplMain.obj&quot;<br />Error&nbsp;&nbsp;&nbsp;[482]&nbsp;;&nbsp;.&nbsp;symbol&nbsp;&quot;_CRCLo&quot;&nbsp;is&nbsp;defined&nbsp;more&nbsp;than&nbsp;once&nbsp;in&nbsp;&quot;ApplMain.obj&quot;<br />Error&nbsp;&nbsp;&nbsp;[482]&nbsp;;&nbsp;.&nbsp;symbol&nbsp;&quot;_CRCHi&quot;&nbsp;is&nbsp;defined&nbsp;more&nbsp;than&nbsp;once&nbsp;in&nbsp;&quot;ApplMain.obj&quot;<br />Error&nbsp;&nbsp;&nbsp;[482]&nbsp;;&nbsp;.&nbsp;symbol&nbsp;&quot;_CRCLo&quot;&nbsp;is&nbsp;defined&nbsp;more&nbsp;than&nbsp;once&nbsp;in&nbsp;&quot;ApplMain.obj&quot;<br />Error&nbsp;&nbsp;&nbsp;[482]&nbsp;;&nbsp;.&nbsp;symbol&nbsp;&quot;_CRCHi&quot;&nbsp;is&nbsp;defined&nbsp;more&nbsp;than&nbsp;once&nbsp;in&nbsp;&quot;ApplMain.obj&quot;<br />Error&nbsp;&nbsp;&nbsp;[482]&nbsp;;&nbsp;.&nbsp;symbol&nbsp;&quot;_CRCLo&quot;&nbsp;is&nbsp;defined&nbsp;more&nbsp;than&nbsp;once&nbsp;in&nbsp;&quot;ApplMain.obj&quot;<br />Error&nbsp;&nbsp;&nbsp;[482]&nbsp;;&nbsp;.&nbsp;symbol&nbsp;&quot;_CRCHi&quot;&nbsp;is&nbsp;defined&nbsp;more&nbsp;than&nbsp;once&nbsp;in&nbsp;&quot;ApplMain.obj&quot;<br />Error&nbsp;&nbsp;&nbsp;[482]&nbsp;;&nbsp;.&nbsp;symbol&nbsp;&quot;_CRCLo&quot;&nbsp;is&nbsp;defined&nbsp;more&nbsp;than&nbsp;once&nbsp;in&nbsp;&quot;ApplMain.obj&quot;<br />...<br /><br />我实在想不出那里把它重定义了,好象语法没错误(提示是&quot;_CRCHi&quot;不是&quot;CRCHi&quot;)<br /><br />谢谢各位了,第一用pic
shishaojun 发表于 2007-12-4 08:24 | 显示全部楼层

"_CRCHi是CRCHi再obj中的符号

呵呵。好像是ucosii的编程风格啊<br /><br />你把这个表格定义给搞成只一处定义和声明。。。。我用的是ccs。不台知道picc的特性
 楼主| neaphy 发表于 2007-12-4 18:54 | 显示全部楼层

其它变量都是这样定义的

ccs我也试了一下,好象只认main模块,其它的.c模块都要给include进来,感觉对分模块写不太好,也许是我的习惯问题....<br /><br />#ifdef&nbsp;CRC_GLOBALS<br />&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;CRC_EXT<br />#else<br />&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;CRC_EXT&nbsp;extern<br />#endif<br /><br />这个表格只在CRC.c中定义,在其它模块用时包含了CRC.h,会被extern申明外部的.我其它变量都是这么弄的,没什么问题,不知道怎么会事,谢谢大家帮忙给点意见,谢谢了
ayb_ice 发表于 2007-12-4 20:33 | 显示全部楼层

这和第一次使用PICC没有任何关系

你见过声明外部变量带初始化的吗。。。
 楼主| neaphy 发表于 2007-12-4 22:00 | 显示全部楼层

谢谢

非常感谢LS
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

69

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部