完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
程序用的UCOS,在使用CRC之前都没出过问题,加了CRC后,程序跑一天多就进入BUSFault,而且每次都是出错在同一位置。
每次定位都定位在CRC_CalcBlockCRC这个函数。 程序从上电开始就每隔一秒进入CRC校验函数,一般运行一天就进入BusFault。查了快一个星期了,实在是找不到办法了。 |
|
相关推荐
10个回答
|
|
只有一个任务调用该函数,程序里面也做了互斥的。
|
|
|
|
那就可能是溢出了。你看一下数组大小,和计算的长度。
|
|
|
|
数组空间是肯定大于计算的长度空间的,而且这个函数一直在调用,每秒调用一次,程序基本上运行1天才会出错。 |
|
|
|
楼主,可以把每次计算的长度输出一下。有时候问题就是这样,可以加一个长度的判断。
|
|
|
|
可以参考文档《Hard Fault的诊断》去排查。
---------------------------------描述------------------------------------------------- 发生Bus Fault时,可以查看总线错误状态寄存器了解异常 的大致类型,供异常处理程序分析 • SCB->CFSR.Bus Fault(BFSR) @0xE000ED29 ---------------------------------下载链接------------------------------------------------- http://www.stmcu.org/document/detail/index/id-213762 ---------------------------------------------------------------------------------------- |
|
|
|
会不会跟堆栈大小有关?调整系统堆栈大小试试。
|
|
|
|
|
|
|
|
嘻嘻爱哈哈 发表于 2019-2-13 19:04 谢谢你,我就是参考的文档里的方法查的,查到最后还是没找到原因 |
|
|
|
因为用了UCOS,所以主堆栈用的空间很小,目前设置的是400,而且进入BUSFault的时候我也查过堆栈内容,没发现有溢出。 |
|
|
|
P_DataBuffer每次传入的都是uint32_t的数组么?
还有你长度bufLen在进入函数时是否判断下如 if (bufLen > xxx) while(1); 是否定义成如下会好些,P_DataBuffer在运算过程中是否有变化?计算返回的值如果不对你是怎么处理的? uint32_t CRC_BufferGet(const uint32* P_DataBuffer, uint32_t bufLen) |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1248 浏览 1 评论
973 浏览 1 评论
MCU友好过渡MPU,米尔基于STM32MP135开发板裸机开发应用笔记
625 浏览 0 评论
自定义系统时钟频率后,用库函数和微带两种方式点亮LED灯,为什么灯的闪烁频率不一致?
1536 浏览 2 评论
1759 浏览 2 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-24 08:55 , Processed in 0.549483 second(s), Total 79, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号