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