硬汉嵌入式论坛

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

[STM32H7] 求助:RTX任务栈、Global Dynamic Memory 设置

[复制链接]

12

主题

178

回帖

214

积分

高级会员

积分
214
发表于 2021-11-18 16:34:09 | 显示全部楼层 |阅读模式
这两天我基于bsp_emmc.c,在写RTX下的EMMC驱动,想一次写48个block(每个block 512字节),驱动写完之后放程序里一跑,各种问题都来了。我的大致流程如下:
1. 硬件初始化以后,emmc自检、擦除并校验的函数放 osThreadNew 的前面。
2. 某个任务里面调用emmc驱动,写入24个block
3. 其余任务主要是网络、串口之类的
以上情况能正常执行,没发现什么错误。

修改成一次往emmc写入48个block时,有几个任务就不执行了。

经调试、找资料、想办法搞了两天,还是没解决,主要措施与故障现象如下:
1. 措施:调大startup_stm32h743xx.s中的stack size 从0x8000调到 0x20000(heap size 0x8000),调大 global dynamic memory到100000
   现象:系统初始化函数都进不去了,osKernelInitialize 之后直接到 HardFaultHandler 的 while(_continue == 0u) 这一行了

2. 其中一次反复修改系统栈、系统堆、任务栈、global dynamic memory,添加emmc校验的函数,所有任务能执行(但是不正常);
费解的是:删除这个函数,其余不改动,反倒跟上面的现象一样:系统初始化函数都进不去,osKernelInitialize 之后直接到 HardFaultHandler 的 while(_continue == 0u) 这一行了

我的问题是:
1. 系统堆栈 是不是需要大于 rtx的 global dynamic memory?
2. 这些问题有啥改正建议吗?

谢谢。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2021-11-18 17:14:09 | 显示全部楼层
你没有使用FlashFS管理吗
回复

使用道具 举报

12

主题

178

回帖

214

积分

高级会员

积分
214
 楼主| 发表于 2021-11-18 19:14:20 | 显示全部楼层
eric2013 发表于 2021-11-18 17:14
你没有使用FlashFS管理吗

之前弄过flashfs 整合sd卡和emmc,没弄通。所以现在flashfs只用来管理sd卡
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2021-11-19 01:05:50 | 显示全部楼层
gallop020142 发表于 2021-11-18 19:14
之前弄过flashfs 整合sd卡和emmc,没弄通。所以现在flashfs只用来管理sd卡

一起管理下靠谱。
回复

使用道具 举报

12

主题

178

回帖

214

积分

高级会员

积分
214
 楼主| 发表于 2021-11-19 10:23:44 | 显示全部楼层
eric2013 发表于 2021-11-19 01:05
一起管理下靠谱。

感谢回复。
1. 论坛好像没找到双sdio的flashfs设置,这个我后面可以再试试
2. 跟我问题跟密切的是:global dynamic memory 应该跟任务栈大小没关系吧,那跟什么有关系呢?
谢谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2021-11-19 10:41:14 | 显示全部楼层
gallop020142 发表于 2021-11-19 10:23
感谢回复。
1. 论坛好像没找到双sdio的flashfs设置,这个我后面可以再试试
2. 跟我问题跟密切的是:glo ...

1、xxx.S文件里面的系统栈仅中断局部变量和中断嵌套使用,跟global dynamic memory没关系
2、你把所有栈都调整这么大才解决,说明程序里面有其它隐含的bug。
3.  如果你使用的是全局动态分配方式,你的任务栈都是来自global dynamic memory


回复

使用道具 举报

12

主题

178

回帖

214

积分

高级会员

积分
214
 楼主| 发表于 2021-11-19 11:03:06 | 显示全部楼层
eric2013 发表于 2021-11-19 10:41
1、xxx.S文件里面的系统栈仅中断局部变量和中断嵌套使用,跟global dynamic memory没关系
2、你把所有栈 ...

十分感谢回复
1. 任务栈的设置方式跟您之前的例程一样,都是直接在 const osThreadAttr_t里面设置 .stack_size,
所有任务的stack_size的和 约为 global dynamic memory 的1/4。
实际运行过程中,通过调试界面看到 global dynamic memory 中已占用的远大于stack_size的和,请问多余的都被哪些占用了呢?
2. 关于sd卡和emmc都用flashfs管理,之前您一个帖子里面提到了,是在群友帮助下实现的。请问用manage run-time environment添加过程中有什么需要注意的地方吗?
谢谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2021-11-19 12:49:04 | 显示全部楼层
gallop020142 发表于 2021-11-19 11:03
十分感谢回复
1. 任务栈的设置方式跟您之前的例程一样,都是直接在 const osThreadAttr_t里面设置 .stac ...

1、把RTX5调试里面的stack water mark打开,然后全编译调试实时看下栈的最大使用情况。有个最大值监测的。

2、之前是cmsis-driver的驱动有bug,现在已经没问题了。跟SD卡一样。
回复

使用道具 举报

12

主题

178

回帖

214

积分

高级会员

积分
214
 楼主| 发表于 2021-11-20 15:43:17 | 显示全部楼层
eric2013 发表于 2021-11-19 12:49
1、把RTX5调试里面的stack water mark打开,然后全编译调试实时看下栈的最大使用情况。有个最大值监测的 ...

谢谢回复。
我大致捋顺了,按照htm调整合适的stack size。

之前程序存在的另一个问题是:2个40K左右的数组自动分配到了 dtcm或者axi,导致SD卡 fmount 不成功、任务运行进入硬件错误。
现在我把这2个40k的数组指定到 sram1,目前sd也能加载,程序貌似正常运行。

请问硬汉,为什么这些数组的位置会影响到flashfs的加载呢?现在用的flashfs版本是 06-13-0008
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2021-11-20 17:37:02 | 显示全部楼层
gallop020142 发表于 2021-11-20 15:43
谢谢回复。
我大致捋顺了,按照htm调整合适的stack size。

注意,如果你用的SDMMC1接口,这个接口仅支持AXI SRAM空间访问。
回复

使用道具 举报

12

主题

178

回帖

214

积分

高级会员

积分
214
 楼主| 发表于 2021-11-20 18:05:23 | 显示全部楼层
eric2013 发表于 2021-11-20 17:37
注意,如果你用的SDMMC1接口,这个接口仅支持AXI SRAM空间访问。

sdmmc1接了emmc,8线,驱动是基于bsp_mmc;
sdmmc2接SD,由flashfs管理;

我看了一下map文件,是把dtcm中24K数组的指针传递过去进行EMMC读写。
而校验数据是否正确的8K数组,恰巧自动分配在了axi sram空间。
没发现问题。

所以请问怎么理解“sdmmc1仅支持axi sram空间访问呢?”
谢谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2021-11-21 08:53:26 | 显示全部楼层
gallop020142 发表于 2021-11-20 18:05
sdmmc1接了emmc,8线,驱动是基于bsp_mmc;
sdmmc2接SD,由flashfs管理;

此贴1楼的最后一个图。

一张图了解H7所有总线和外设的时钟分配
http://www.armbbs.cn/forum.php?m ... 5908&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

12

主题

178

回帖

214

积分

高级会员

积分
214
 楼主| 发表于 2021-11-21 09:56:27 | 显示全部楼层
eric2013 发表于 2021-11-21 08:53
此贴1楼的最后一个图。

一张图了解H7所有总线和外设的时钟分配

谢谢回复,我消化一下
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2021-11-22 01:13:53 | 显示全部楼层
gallop020142 发表于 2021-11-21 09:56
谢谢回复,我消化一下

好的,还有什么问题,再交流。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 00:21 , Processed in 0.318869 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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