你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
举报
安 发表于 2017-3-23 11:07 有几个任务在调用该函数?如果多个调用,最好做一下互斥。
安 发表于 2017-3-23 11:13 那就可能是溢出了。你看一下数组大小,和计算的长度。
安 发表于 2017-3-23 11:52 楼主,可以把每次计算的长度输出一下。有时候问题就是这样,可以加一个长度的判断。 ...
Dylan疾风闪电 发表于 2017-3-23 11:52 可以参考文档《Hard Fault的诊断》去排查。 ---------------------------------描述-------------------- ...
xmshao 发表于 2017-3-23 13:15 会不会跟堆栈大小有关?调整系统堆栈大小试试。
只有一个任务调用该函数,程序里面也做了互斥的。
数组空间是肯定大于计算的长度空间的,而且这个函数一直在调用,每秒调用一次,程序基本上运行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)