[STM32L4] 关于使用stm32l452运行freertos+emwin+fatfs出现的硬件错误问题

[复制链接]
1374|13
 楼主| jcky001 发表于 2024-7-26 18:33 | 显示全部楼层 |阅读模式
近期在使用STM32L452运行freertos+emwin+fatfs的时候发现了一个奇怪的硬件错误现象如下:运行系统开始正常,但是读书后写入SD卡并在LCD上显示波形一段时间系统卡死,调试发现进入了HardFault_Handler();
调试现场信息如下:

callstack如下:除了几个任务就进了硬件错误了

查询内存地址内如如下,都说找0800开头的是出问题函数的地址,不知道对不对:

查询改地址的反汇编代码如下:

对应到了SD_write函数上,之前仅仅测试写卡都是一直没问题的,不知道为什么加上了屏的显示任务运行一下就不行了。请高手看看排查问题的流程对吗?对的话,后面怎么找问题原因呢?
突然下起雨 发表于 2024-7-30 18:25 | 显示全部楼层
有可能是堆栈溢出了
突然下起雨 发表于 2024-7-30 18:25 | 显示全部楼层
检查堆栈溢出
堆栈溢出是嵌入式系统中常见的问题。每个任务都有独立的堆栈空间,如果某个任务的堆栈不够用,可能会导致HardFault。
突然下起雨 发表于 2024-7-30 18:25 | 显示全部楼层
增加任务堆栈大小
尝试增加相关任务的堆栈大小,特别是SD卡写入和屏幕显示任务:

c
#define SD_TASK_STACK_SIZE    512
#define LCD_TASK_STACK_SIZE   512

xTaskCreate(sdTask, "SD Task", SD_TASK_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL);
xTaskCreate(lcdTask, "LCD Task", LCD_TASK_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL);


海滨消消 发表于 2024-8-4 16:56 | 显示全部楼层
堆栈溢出
laocuo1142 发表于 2024-8-4 16:57 | 显示全部楼层
内存访问越界
stormwind123 发表于 2024-8-4 17:02 | 显示全部楼层
代码和库不兼容
flycamelaaa 发表于 2024-8-4 19:00 | 显示全部楼层
硬件资源冲突
stormwind123 发表于 2024-8-4 20:23 | 显示全部楼层
检查是否有ISR中的代码可能导致问题,特别是那些与SD卡或LCD相关的
wailian1265k 发表于 2024-8-18 15:55 | 显示全部楼层
FORCED位或VECTTBL位是否被设置
wailian1265k 发表于 2024-8-18 16:01 | 显示全部楼层
在FreeRTOS中,任务的堆栈溢出是导致系统进入HardFault_Handler()的常见原因。
wailian1265k 发表于 2024-8-18 16:01 | 显示全部楼层
查看HardFault的寄存器值
wailian1265k 发表于 2024-8-18 16:01 | 显示全部楼层
确认SD卡初始化是否成功,检查SD卡是否正常工作,是否有硬件连接问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1650

主题

5706

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部