硬汉嵌入式论坛

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

[NUCLEO-H743ZI] 【STM32H743实验例程】实验8:STM32H743动态内存管理,同时分区管理AXI RAM,DTCM,SRAM1等五块空间

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2018-4-9 03:15:03 | 显示全部楼层 |阅读模式
例程说明:
    将RTX5系统的动态内存管理搞了出来,可以同时管理多个分区。如果其它RTOS中使用,记得做互斥保护或者加个调度锁均可。支持动态内存使用情况统计
实验介绍:
开发平台:官方STM32H743 NUCLEO板子
开发环境:MDK5.25正式版
软件版本:   
(1)CMSIS软件包 V5.3.0
(2)H7的HAL库版本 V1.2.0
注意事项:
要使用JLINK才可以使用RTT,而NUCLEO板子使用JLINK的方法看此贴:链接
例程下载:
实验8:STM32H743动态内存管理,同时分区管理AXI RAM,DTCM,SRAM1和SRAM2五块空间.7z (1.1 MB, 下载次数: 1127)


空间分配:
/* AXI SRAM, D1域名, 128KB */
mem_head_t *AXISRAMUsed;
uint64_t AppMallocAXISRAM[128*1024/8];

/* SRAM1, D2域, 128KB */
mem_head_t *SRAM1Used;
uint64_t AppMallocSRAM1[128*1024/8]__attribute__((at(0x30000000)));

/* SRAM2, D2域, 128KB */
mem_head_t *SRAM2Used;
uint64_t AppMallocSRAM2[128*1024/8]__attribute__((at(0x30020000)));

/* DTCM, 128KB */
mem_head_t *DTCMUsed;
uint64_t AppMallocDTCM[128*1024/8]__attribute__((at(0x20000000)));

初始化:
/* 初始化动态内存空间 */
osRtxMemoryInit(AppMallocAXISRAM, 128*1024);
osRtxMemoryInit(AppMallocSRAM1, 128*1024);
osRtxMemoryInit(AppMallocSRAM2, 128*1024);
osRtxMemoryInit(AppMallocDTCM, 128*1024);

AXI SRAM(申请三次,释放三次,释放完毕后会固定占用16字节):
image.png

SRAM1(同上)
image.png

SRAM2(同上)
image.png

DTCM(同上)
image.png


移植仅需要rtx_lib.h和rtx_memory.c文件,可用于任何其它CM内核。

QQ截图20180409025622.png






评分

参与人数 1金币 +20 收起 理由
OldGerman + 20 很给力!

查看全部评分

回复

使用道具 举报

3

主题

13

回帖

22

积分

新手上路

积分
22
发表于 2018-4-9 08:26:43 | 显示全部楼层
狂顶! 硬汉辛苦了!
回复

使用道具 举报

0

主题

38

回帖

38

积分

新手上路

one is enough

积分
38
发表于 2018-4-9 08:47:53 | 显示全部楼层
mark~~~1024~~
one is enough
回复

使用道具 举报

20

主题

249

回帖

309

积分

高级会员

积分
309
发表于 2018-4-9 09:09:25 | 显示全部楼层
辛苦辛苦,+1024个赞
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2018-4-9 09:20:40 | 显示全部楼层
辛苦了硬汉哥
回复

使用道具 举报

4

主题

531

回帖

543

积分

金牌会员

积分
543
发表于 2018-4-9 11:57:26 | 显示全部楼层
硬汉大哥,上次看了一篇,把函数定义到itcm里面,可是尝试了,运行不成功
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2018-4-9 12:31:56 | 显示全部楼层
qiousanxi 发表于 2018-4-9 11:57
硬汉大哥,上次看了一篇,把函数定义到itcm里面,可是尝试了,运行不成功

http://www.armbbs.cn/forum.php?m ... &extra=page%3D2
回复

使用道具 举报

5

主题

578

回帖

593

积分

版主

Rank: 7Rank: 7Rank: 7

积分
593
发表于 2018-4-9 12:49:07 | 显示全部楼层
我比较了下rtx4的对标文件,发现代码基本上相同,只不过代码形式改了模样
回复

使用道具 举报

4

主题

531

回帖

543

积分

金牌会员

积分
543
发表于 2018-4-9 13:22:00 | 显示全部楼层
eric2013 发表于 2018-4-9 12:31
http://www.armbbs.cn/forum.php?mod=viewthread&tid=85705&extra=page%3D2

硬汉大哥,我想请教一下!
函数那样设置之后代码下载保存位置在flash吗?
然后通过,系统自己搬运到,itcm?
回复

使用道具 举报

4

主题

531

回帖

543

积分

金牌会员

积分
543
发表于 2018-4-9 13:23:17 | 显示全部楼层
qiousanxi 发表于 2018-4-9 13:22
硬汉大哥,我想请教一下!
函数那样设置之后代码下载保存位置在flash吗?
然后通过,系统自己搬运到,i ...

之前我把一个函数定义到内部sram,下载进去后,调用没有用!系统也跑不起来,放到flash就好着呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2018-4-9 17:37:06 | 显示全部楼层
myxiaonia 发表于 2018-4-9 12:49
我比较了下rtx4的对标文件,发现代码基本上相同,只不过代码形式改了模样

是的myxiaonia兄,做了编码规范
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2018-4-9 17:37:31 | 显示全部楼层
qiousanxi 发表于 2018-4-9 13:22
硬汉大哥,我想请教一下!
函数那样设置之后代码下载保存位置在flash吗?
然后通过,系统自己搬运到,i ...

是的,就是这样的。
回复

使用道具 举报

5

主题

578

回帖

593

积分

版主

Rank: 7Rank: 7Rank: 7

积分
593
发表于 2018-4-11 13:00:33 | 显示全部楼层
eric2013 发表于 2018-4-9 17:37
是的myxiaonia兄,做了编码规范

我能说 我怎么感觉还是以前的代码风格比较平易近人呢 不知道你是什么看法
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2018-4-11 13:49:59 | 显示全部楼层
myxiaonia 发表于 2018-4-11 13:00
我能说 我怎么感觉还是以前的代码风格比较平易近人呢 不知道你是什么看法

是的,我非常赞同,以前的RTX4简直堪称超经典之做。

我现在直接把MDK5里面的RTX4倒腾出来用了,把他们那个CMSIS-RTOS封装层去掉了,太难用了。

不得不说KEIL跟了ARM后,做这个RTX4的兄弟估计心里也苦吧(如果跟RTX5不是同一个作者的话)。
回复

使用道具 举报

36

主题

2039

回帖

2147

积分

至尊会员

积分
2147
发表于 2018-4-16 19:02:32 | 显示全部楼层

666,几天没来,这么多东西了
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-8-22 01:02:03 | 显示全部楼层
请教下,我移植到Freertos用,

多任务申请外部SDRAM 结果  使用率 直接超了 SDRAMsed : 8519.4%

请教下  可能是什么原因
20180822010042.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2018-8-22 01:09:59 | 显示全部楼层
在水一方 发表于 2018-8-22 01:02
请教下,我移植到Freertos用,

多任务申请外部SDRAM 结果  使用率 直接超了 SDRAMsed : 8519.4%

多任务的话,需要封装下申请和释放函数,做个互斥。
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-8-22 01:14:50 | 显示全部楼层
eric2013 发表于 2018-8-22 01:09
多任务的话,需要封装下申请和释放函数,做个互斥。

我是这样做的 用完 置零了
QQ截图20180822011319.png
QQ截图20180822011310.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2018-8-22 01:16:36 | 显示全部楼层
在水一方 发表于 2018-8-22 01:14
我是这样做的 用完 置零了

用FreeRTOS自带的互斥组件做,这个是最安全的。
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-8-22 01:23:23 | 显示全部楼层
eric2013 发表于 2018-8-22 01:16
用FreeRTOS自带的互斥组件做,这个是最安全的。

好的 ,谢谢。早点休息
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-8-22 10:52:58 | 显示全部楼层
eric2013 发表于 2018-8-22 01:16
用FreeRTOS自带的互斥组件做,这个是最安全的。

硬汉,再请教一下  多个任务(大于2个) 是否应该使用递归互斥???
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2018-8-22 11:06:03 | 显示全部楼层
在水一方 发表于 2018-8-22 10:52
硬汉,再请教一下  多个任务(大于2个) 是否应该使用递归互斥???

不用,同一个任务里面嵌套才需要递归。而你同一个任务里面不存在嵌套,因为申请是依次进行的,不存在嵌套问题。
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-8-22 11:38:29 | 显示全部楼层
eric2013 发表于 2018-8-22 11:06
不用,同一个任务里面嵌套才需要递归。而你同一个任务里面不存在嵌套,因为申请是依次进行的,不存在嵌套 ...

明白了,很感谢
回复

使用道具 举报

36

主题

2039

回帖

2147

积分

至尊会员

积分
2147
发表于 2019-3-13 10:19:31 | 显示全部楼层
准备晚上添加工程里面测试下。
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

18

主题

321

回帖

375

积分

高级会员

积分
375
发表于 2020-2-19 22:31:11 | 显示全部楼层
请问一下 硬汉哥,为什么在其他RTOS上使用动态内存的时候需要增加互斥保护或者调度锁呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2020-2-20 00:09:16 | 显示全部楼层
王海靖 发表于 2020-2-19 22:31
请问一下 硬汉哥,为什么在其他RTOS上使用动态内存的时候需要增加互斥保护或者调度锁呢?

原始API不支持多任务。
而在RTX5是不用,原因是RTX5的API是通过SVC中断调用的。
回复

使用道具 举报

18

主题

321

回帖

375

积分

高级会员

积分
375
发表于 2020-2-20 00:34:18 | 显示全部楼层
eric2013 发表于 2020-2-20 00:09
原始API不支持多任务。
而在RTX5是不用,原因是RTX5的API是通过SVC中断调用的。

多谢解答
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2020-3-27 09:27:38 | 显示全部楼层
硬汉大哥,我使用您这个例程,不过是没有在操作系统中跑,可以分配内存,但是发现有时候改个无关紧要的参数,内存就无法分配了,程序跑不起来,这一般是什么原因,就和下面这个代码类似
微信图片_20200327092654.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2020-3-27 10:58:20 | 显示全部楼层
yuanchangshun 发表于 2020-3-27 09:27
硬汉大哥,我使用您这个例程,不过是没有在操作系统中跑,可以分配内存,但是发现有时候改个无关紧要的参数 ...

这个问题貌似跟内存分配的关系不大,估计程序里存在其他问题。
回复

使用道具 举报

1

主题

83

回帖

86

积分

初级会员

积分
86
发表于 2020-3-27 11:14:57 | 显示全部楼层
感谢硬哥,硬哥牛逼
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2020-3-28 14:09:11 | 显示全部楼层
感谢硬哥,后来定位到了
回复

使用道具 举报

1

主题

32

回帖

35

积分

新手上路

积分
35
发表于 2020-6-6 03:23:46 | 显示全部楼层
eric2013 发表于 2020-2-20 00:09
原始API不支持多任务。
而在RTX5是不用,原因是RTX5的API是通过SVC中断调用的。

这就是说在一些需要硬实时的地方这就方法可能会有性能影响?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2020-6-6 08:30:10 | 显示全部楼层
watershade 发表于 2020-6-6 03:23
这就是说在一些需要硬实时的地方这就方法可能会有性能影响?

这种动态分配不能用在硬实时上。

硬实时要使用数组分配,安全可靠,分配时间基本固定。
回复

使用道具 举报

5

主题

26

回帖

41

积分

新手上路

积分
41
发表于 2020-9-16 00:51:05 | 显示全部楼层
请教一下,程序本身就用了RTX5,如果还要用这个动态内存管理要怎么做?直接加上#include "rtx_lib.h" 之后会报错。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2020-9-16 09:26:11 | 显示全部楼层
黄毅7789 发表于 2020-9-16 00:51
请教一下,程序本身就用了RTX5,如果还要用这个动态内存管理要怎么做?直接加上#include "rtx_lib.h" 之后 ...

近期做个案例分享。
回复

使用道具 举报

5

主题

26

回帖

41

积分

新手上路

积分
41
发表于 2020-9-16 17:02:09 | 显示全部楼层
eric2013 发表于 2020-9-16 09:26
近期做个案例分享。

感谢硬汉            
回复

使用道具 举报

2

主题

11

回帖

17

积分

新手上路

积分
17
发表于 2022-4-6 20:07:24 | 显示全部楼层
硬汉哥,为什么不直接使用malloc/free?用第三方内存管理库的优势是什么?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2022-4-7 10:18:00 | 显示全部楼层
achao89 发表于 2022-4-6 20:07
硬汉哥,为什么不直接使用malloc/free?用第三方内存管理库的优势是什么?

自带的只能分配一个内存块使用,我们这里可以分配多个内存块使用。
回复

使用道具 举报

5

主题

192

回帖

212

积分

高级会员

积分
212
发表于 2022-12-4 12:13:09 | 显示全部楼层
这些函数在RTX5下使用的话是线程安全,不需要加互斥锁保护吗?  是否可以在中断里面使用呢?
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2023-3-7 10:50:08 | 显示全部楼层
辛苦了硬汉哥
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 09:37 , Processed in 0.926719 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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