程序用的UCOS,在使用CRC之前都没出过问题,加了CRC后,程序跑一天多就进入BUSFault,而且每次都是出错在同一位置。 每次定位都定位在CRC_CalcBlockCRC这个函数。 程序从上电开始就每隔一秒进入CRC校验函数,一般运行一天就进入BusFault。查了快一个星期了,实在是找不到办法了。
只有一个任务调用该函数,程序里面也做了互斥的。
数组空间是肯定大于计算的长度空间的,而且这个函数一直在调用,每秒调用一次,程序基本上运行1天才会出错。
---------------------------------描述-------------------------------------------------
发生Bus Fault时,可以查看总线错误状态寄存器了解异常
的大致类型,供异常处理程序分析
• SCB->CFSR.Bus Fault(BFSR) @0xE000ED29
---------------------------------下载链接-------------------------------------------------
https://www.stmcu.org.cn/document/detail/index/id-213762
----------------------------------------------------------------------------------------
好的,我试下,谢谢
谢谢你,我就是参考的文档里的方法查的,查到最后还是没找到原因
因为用了UCOS,所以主堆栈用的空间很小,目前设置的是400,而且进入BUSFault的时候我也查过堆栈内容,没发现有溢出。
还有你长度bufLen在进入函数时是否判断下如
if (bufLen > xxx) while(1);
是否定义成如下会好些,P_DataBuffer在运算过程中是否有变化?计算返回的值如果不对你是怎么处理的?
uint32_t CRC_BufferGet(const uint32* P_DataBuffer, uint32_t bufLen)