硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4492|回复: 5
收起左侧

[STM32H7] H7 hardFault问题求教

[复制链接]

23

主题

99

回帖

168

积分

初级会员

积分
168
发表于 2021-7-18 19:42:03 | 显示全部楼层 |阅读模式
用的是硬汉的H7 UCOS的模板,现在开了5个任务,目前会出现不定时进入hardFault的错误,都是连续运行好几个小时才出现,有时候连续运行5小时,有时候6小时,有时候7小时,请假大神这种现象最有可能是什么原因?目前没有排除的思路。



回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115668
QQ
发表于 2021-7-19 00:08:53 | 显示全部楼层
应该跟这个坛友的问题一样

UCOSIII浮点寄存器出栈时进入错误中断
http://www.armbbs.cn/forum.php?m ... 7243&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

23

主题

99

回帖

168

积分

初级会员

积分
168
 楼主| 发表于 2021-7-19 14:35:19 | 显示全部楼层
eric2013 发表于 2021-7-19 00:08
应该跟这个坛友的问题一样

UCOSIII浮点寄存器出栈时进入错误中断

硬汉大神,我现在发现大多数是进入MemManage_Handler,HardFault应该也是由MemManage_Handler引起的。麻烦帮忙看看是什么原因引起的MemManage_Handler,MPU和CACHE配置如下,串口用的DMA接收,缓存用的SRAM4:
static void MPU_Config( void )
{
        MPU_Region_InitTypeDef MPU_InitStruct;

        /* 禁止 MPU */
        HAL_MPU_Disable();

        MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
        MPU_InitStruct.BaseAddress      = 0x24000000;
        MPU_InitStruct.Size             = MPU_REGION_SIZE_512KB;
        MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;     
        MPU_InitStruct.IsBufferable     = MPU_ACCESS_BUFFERABLE;      
        MPU_InitStruct.IsCacheable      = MPU_ACCESS_CACHEABLE;     
        MPU_InitStruct.IsShareable      = MPU_ACCESS_NOT_SHAREABLE;   
        MPU_InitStruct.Number           = MPU_REGION_NUMBER0;     
        MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL1;
        MPU_InitStruct.SubRegionDisable = 0x00;  
        MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;
        HAL_MPU_ConfigRegion(&MPU_InitStruct);

        /* 由于开启了数据Cache,会造成DMA和CPU访问SRAM4数据不一致的问题,特此将SRAM4空间关闭Cache */
        MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
        MPU_InitStruct.BaseAddress      = 0x38000000;
        MPU_InitStruct.Size             = MPU_REGION_SIZE_64KB;       
        MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
        MPU_InitStruct.IsBufferable     = MPU_ACCESS_NOT_BUFFERABLE;
        MPU_InitStruct.IsCacheable      = MPU_ACCESS_NOT_CACHEABLE;
        MPU_InitStruct.IsShareable      = MPU_ACCESS_NOT_SHAREABLE;
        MPU_InitStruct.Number           = MPU_REGION_NUMBER1;
        MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL1;
        MPU_InitStruct.SubRegionDisable = 0x00;
        MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;
        HAL_MPU_ConfigRegion(&MPU_InitStruct);

        /*使能 MPU */
        HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
}
就配置了两个RAM区,而主RAM用的还是DTCM。实在想不到什么原因会引起MemManage_Handler。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115668
QQ
发表于 2021-7-19 15:46:44 | 显示全部楼层
shibinjie 发表于 2021-7-19 14:35
硬汉大神,我现在发现大多数是进入MemManage_Handler,HardFault应该也是由MemManage_Handler引起的。麻 ...

可以将其配置成我这个帖子里面类似的最低性能试试

使用STM32H7的AXI SRAM,SRAM1到SRAM4对应的Cache最高性能和最低性能配置
http://www.armbbs.cn/forum.php?m ... 9322&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

23

主题

99

回帖

168

积分

初级会员

积分
168
 楼主| 发表于 2021-7-20 08:45:22 | 显示全部楼层
eric2013 发表于 2021-7-19 15:46
可以将其配置成我这个帖子里面类似的最低性能试试

使用STM32H7的AXI SRAM,SRAM1到SRAM4对应的Cache最 ...

其实AXI SRAM可以不配置,我主ram用的是DTCM,串口DMA buffer用的是sram4,而sram4就是配置的最低性能。实在想不通为什么会进MemManage_Handler
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115668
QQ
发表于 2021-7-20 08:50:07 | 显示全部楼层
shibinjie 发表于 2021-7-20 08:45
其实AXI SRAM可以不配置,我主ram用的是DTCM,串口DMA buffer用的是sram4,而sram4就是配置的最低性能。 ...

那估计是内存溢出之类的问题了。

另外看下hardfault report的具体错误类型。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-11 05:26 , Processed in 0.242136 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表