硬汉嵌入式论坛

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

[有问必答] F407没有外扩ram,加大内存管理的时候出现奇怪的现象

[复制链接]

30

主题

63

回帖

153

积分

初级会员

积分
153
发表于 2021-3-30 22:58:51 | 显示全部楼层 |阅读模式
本帖最后由 熊大 于 2021-3-30 23:25 编辑

硬汉哥,今天调试软件的时候出现了奇怪的问题,平台是STM32F407ZGT6,搭载了FREERTOS、EMWIN和FATFS,我加大了如图1和图2的内存后,直接发现FATFS出现DISK_ERR的报错,代码追踪下来,发现是FATFS在调用HAL_SD_ReadBlocks_DMA的时候,DMA中断进不去导致超时了,但把内存修改小一些,就正常了,按理说内存如果过大了,直接宕机了,但从图3来看,我申请的内存也没有过大呀,才60kb多,为什么会出现中断进不去的现象呢?
2.png
3.png
1.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2021-3-31 09:11:00 | 显示全部楼层
一般这种加大了反而异常的神奇问题,说明你的程序里面大概率隐藏着其他bug
回复

使用道具 举报

30

主题

63

回帖

153

积分

初级会员

积分
153
 楼主| 发表于 2021-3-31 10:57:45 | 显示全部楼层
eric2013 发表于 2021-3-31 09:11
一般这种加大了反而异常的神奇问题,说明你的程序里面大概率隐藏着其他bug

硬汉哥,后面调试过程中 我尝试过 只开了GUI一个线程和SD卡一个线程,GUI只进行了GUI_Init();然后就while(1)了,另外SD卡线程挂载成功后,进行其他的操作就直接是DISK_ERR (如果把GUI_Init()注释掉,也正常了),难道是我移植的emwin有问题?但内存改小也正常, 有点头疼。。
回复

使用道具 举报

30

主题

63

回帖

153

积分

初级会员

积分
153
 楼主| 发表于 2021-3-31 22:31:04 | 显示全部楼层
熊大 发表于 2021-3-31 10:57
硬汉哥,后面调试过程中 我尝试过 只开了GUI一个线程和SD卡一个线程,GUI只进行了GUI_Init();然后就while ...

找到原因了。。。加大内存分配后,FS句柄被自动分配到CCM了。。。。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2021-4-2 08:14:24 | 显示全部楼层
熊大 发表于 2021-3-31 22:31
找到原因了。。。加大内存分配后,FS句柄被自动分配到CCM了。。。。

谢谢告知最终原因。
回复

使用道具 举报

30

主题

63

回帖

153

积分

初级会员

积分
153
 楼主| 发表于 2021-4-5 13:34:07 | 显示全部楼层
eric2013 发表于 2021-4-2 08:14
谢谢告知最终原因。

,应该的,大家一起互相帮助
回复

使用道具 举报

356

主题

2180

回帖

3253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3253
发表于 2021-4-14 08:33:10 | 显示全部楼层
FatFS会自己使用DMA吗?? 感觉不对啊。。。
回复

使用道具 举报

356

主题

2180

回帖

3253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3253
发表于 2021-4-14 08:33:50 | 显示全部楼层
你可以把CCM全部分配给RTOS的heap。 反正它不用dma
回复

使用道具 举报

30

主题

63

回帖

153

积分

初级会员

积分
153
 楼主| 发表于 2021-4-14 10:32:05 | 显示全部楼层
caicaptain2 发表于 2021-4-14 08:33
FatFS会自己使用DMA吗?? 感觉不对啊。。。

不会,我sdio操作方式是dma中断
f_mount的时候句柄变量被keil自动划分到ccm内存去了,FATFS句柄里面 会有一小块buf
回复

使用道具 举报

32

主题

88

回帖

184

积分

初级会员

积分
184
发表于 2024-12-3 15:58:12 | 显示全部楼层
caicaptain2 发表于 2021-4-14 08:33
你可以把CCM全部分配给RTOS的heap。 反正它不用dma

能指定CCM分配给谁吗?代码上或配置上怎么实现呢
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2024-12-4 09:31:37 | 显示全部楼层
Y1ng 发表于 2024-12-3 15:58
能指定CCM分配给谁吗?代码上或配置上怎么实现呢

像使用内部SRAM一样定义使用SDRAM和CCM RAM,可以随意定义到指定的RAM区域且无需具体地址
https://forum.anfulai.cn/forum.php?mod=viewthread&tid=89275
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-12 02:48 , Processed in 0.045762 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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