完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好,最近学习在STM32F7上使用FreeRTOS,程序运行一段时间后进入HardFault_Handler,该时间不定。故障分析器给的报错信息为“总线,存储器管理或使用失败(FORCED)”,“精准的数据访问冲突(PRECISERR)”。
其中工程中线程共6个。线程A每秒打印时间;线程B负责串口1发送命令;线程C负责接收串口1数据,并通过队列给线程D、线程E、和线程F发送数据;线程D负责通过队列获取C发送的数据,并将数据处理后通过队列将结果发送给线程F;线程E负责将接收的数据保存到SD卡;线程F负责将接收的数据通过串口2发送出去。其中线程优先级从大到小为C=E>D>F>B>A,每个线程使用堆栈空间设的在10*1024左右。 附件图片为程序运行时抓取的各线程情况,其中线程G并不是我所创建,程序通过STM32CubeIDE生成后就有,而且线程名称也是乱码,不知道是什么情况,死机会不会是G造成的那? |
|
相关推荐
1个回答
|
|
在使用FreeRTOS时,程序进入HardFault_Handler的原因可能有以下几种情况:
1. 内存使用错误:程序中可能存在内存泄漏、堆栈溢出等问题,这些问题会导致内存管理失败,进而引发HardFault。 解决方法:检查代码中是否有内存管理错误,尤其是堆栈溢出的问题。可以通过增加任务堆栈大小或使用静态分配的任务来解决。 2. 中断冲突:多个中断之间的优先级或抢占顺序不正确,导致冲突,进而引发HardFault。 解决方法:检查中断优先级和抢占顺序的设置,确保合理的中断处理顺序。 3. 硬件错误:可能存在硬件故障、时钟错误等问题,导致程序运行异常。 解决方法:检查硬件连接、时钟配置是否正确,并排除硬件故障的可能。 4. 资源竞争:多个任务对共享资源的竞争可能导致数据访问错误,从而引发HardFault。 解决方法:使用信号量或互斥量来保护共享资源,以避免资源竞争问题。 根据你提供的问题描述,可能存在以下几个潜在问题: 1. 线程C向线程D、线程E和线程F发送数据的队列是否正确使用。确保队列能够正确传递数据,且不发生溢出或阻塞的情况。 2. 线程D的数据处理过程是否正确。确保数据处理后能够正确发送给线程F。 3. 线程E的SD卡写入操作是否正确,可能存在SD卡写入错误或超时的情况。 4. 线程F向串口2发送数据时是否正确处理了串口的初始化和发送操作。确保串口配置正确,并检查是否有数据发送错误。 你可以根据以上建议进行排查和调试,以确定问题所在。可以使用调试工具、日志输出等方式来帮助定位错误位置。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1804 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1629 浏览 1 评论
1097 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
736 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1686 浏览 2 评论
1944浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
747浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
580浏览 3评论
602浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
565浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 08:49 , Processed in 0.910853 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号