一些函数的使用问题

2019-07-22 14:55发布

1.CRC检验函数:uint16_t Crc16(uint16_t ui16Crc, //CRC校验值的初始值,如果缓冲区都是需要校验的数,写0即可const uint8_t * pui8Data, //缓冲区
uint32_t ui32Count)//缓冲区有多少个字节
uint8_t buf[6]={0x01,0x02,0x03,0x04,0x05,0x06};
uint16_t crc,crc1;
        crc = GetCRC16(buf,6);          //计算CRC校验值,自己写的查表法函数
        crc1=Crc16(0,buf,6);      //TIVA自带的函数

程序运行结果
12.jpg
CRC计算软件结果(高低相反)
123.jpg
问题:为什么TIVA自带的函数计算出来不一样?问题在哪呢


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
djz1992
1楼-- · 2019-07-22 20:21
 精彩回答 2  元偷偷看……
dirtwillfly
2楼-- · 2019-07-23 00:46
1、因为算法不一样
crc16有很多种算法,要使用一样的多项式才能得到相同的结果
dirtwillfly
3楼-- · 2019-07-23 04:18
xyz549040622
4楼-- · 2019-07-23 09:46
CRC校验只是一个算法,里面的CRC值是需要自己填充的,你不知道TIVA 里面的校验值是哪些,出来不一样很正常。
xyz549040622
5楼-- · 2019-07-23 11:11
djz1992 发表于 2016-5-16 10:20
@xyz549040622 @dirtwillfly 二位大神,又是我
另外那个仿真时候run》clock》enable和查看函数运行时间为什 ...

这个没用过,我试试看。
djz1992
6楼-- · 2019-07-23 11:26
本帖最后由 djz1992 于 2016-5-16 16:40 编辑
xyz549040622 发表于 2016-5-16 15:22
CRC校验只是一个算法,里面的CRC值是需要自己填充的,你不知道TIVA 里面的校验值是哪些,出来不一样很正常 ...

看来我照抄来的校验程序跟那个CRC计算器居然还是同一个算法。。。也是运气
另外systick函数来看程序运行时间,这个计数是递减的吗?我用了一下好像是递减
我写成这样,count在定时器里累加,进函数时清零,在出函数加断点,SysTickValueGet也在进出函数时取值并求差
结果计算出来num对应的时间值很小,十几微秒,而count对应的时间值比较大,有几十微秒,相差很大,这是为什么?
我写了一个五秒的delay,count计算是五秒无误,那到底哪个准确?
函数a()

   SysTickPeriodSet(10000000);
   SysTickEnable();
   count=0;
   ui32Value1 = SysTickValueGet();
   。。函数主体。。
   ui32Value2 = SysTickValueGet();

   num=ui32Value1 -ui32Value2;
(断点)



一周热门 更多>