完善资料让更多小伙伴认识你,还能领取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) |
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
2810 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
2420 浏览 1 评论
stm32用fsmc读取ad7606采集数据,数据不变,只有开发版复位才更新数据
2288 浏览 0 评论
2404 浏览 1 评论
1643 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 04:31 , Processed in 1.049955 second(s), Total 88, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
7805