硬汉嵌入式论坛

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

[SRAM] STM32H7 片内内存和片外内存混合使用问题

[复制链接]

16

主题

37

回帖

85

积分

初级会员

积分
85
发表于 2021-7-7 12:10:56 | 显示全部楼层 |阅读模式
新手 请教下,2个内存,怎么混合使用。 比如我想有个任务在片内内存运行。初始化的时候 只初始化了片外内存,rtos  也初始化在片外上。
#define SDRAM_BASE_ADDR                0xA0000000
init_memory((void *) MEM_BASE_ADDR,MALLOC_MEM_SIZE);

#define freertos_sdram SDRAM_BASE_ADDR + SDRAM_SIZE - OS_RAM_SIZE,OS_RAM_SIZE
vPortDefineHeapRegions((HeapRegion_t*)freertos_sdram);

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2021-7-7 12:15:41 | 显示全部楼层
这两个适合你。

基于STM32H7的TCM,SRAM,SDRAM等六块内存区的动态内存分配,含MDK和IAR
http://www.armbbs.cn/forum.php?mod=viewthread&tid=107071

像使用内部SRAM一样定义使用STM32H7的外部SDRAM,含MDK和IAR两版
http://www.armbbs.cn/forum.php?m ... 8697&fromuid=58
(出处: 硬汉嵌入式论坛)

回复

使用道具 举报

16

主题

37

回帖

85

积分

初级会员

积分
85
 楼主| 发表于 2021-7-7 12:25:45 | 显示全部楼层
eric2013 发表于 2021-7-7 12:15
这两个适合你。

基于STM32H7的TCM,SRAM,SDRAM等六块内存区的动态内存分配,含MDK和IAR

多谢。 硬汉哥,请教下,如果照我上边那么初始化,是不是每次申请内存都是申请的外部内存。而内部内存不会被使用。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2021-7-7 15:46:58 | 显示全部楼层
zeroall 发表于 2021-7-7 12:25
多谢。 硬汉哥,请教下,如果照我上边那么初始化,是不是每次申请内存都是申请的外部内存。而内部内存不 ...

那种情况下是调用FreeRTOS的API进行申请的话,是的。
回复

使用道具 举报

4

主题

9

回帖

21

积分

新手上路

积分
21
发表于 2021-7-7 22:02:08 | 显示全部楼层
eric2013 发表于 2021-7-7 15:46
那种情况下是调用FreeRTOS的API进行申请的话,是的。

硬汉哥,如果楼主这种情况下,用malloc_irq()申请,或者用malloc 申请。由于初始的内存是外部sdram,那是不是也是申请的外部内存呢?
回复

使用道具 举报

4

主题

9

回帖

21

积分

新手上路

积分
21
发表于 2021-7-7 23:00:29 | 显示全部楼层
如果在rtos 系统中可以直接使用吗,不需要关闭中断吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2021-7-8 00:21:39 | 显示全部楼层
upto 发表于 2021-7-7 22:02
硬汉哥,如果楼主这种情况下,用malloc_irq()申请,或者用malloc 申请。由于初始的内存是外部sdram,那是 ...

楼主位的修改,只是修改了FreeRTOS的,修改不了C库的malloc申请。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2021-7-8 00:22:26 | 显示全部楼层
upto 发表于 2021-7-7 23:00
如果在rtos 系统中可以直接使用吗,不需要关闭中断吗

RTOS中使用,如果没有做多任务支持,需要做支持。

使用RTOS的动态分配API不用,本身已经做了
回复

使用道具 举报

16

主题

37

回帖

85

积分

初级会员

积分
85
 楼主| 发表于 2021-7-8 09:04:29 | 显示全部楼层
eric2013 发表于 2021-7-7 15:46
那种情况下是调用FreeRTOS的API进行申请的话,是的。

调用my_malloc(),呢。
void * my_malloc (unsigned int size)
{
        void *p;
        INTX_DISABLE();
        p = malloc_irq(size);
        INTX_ENABLE();
        return p;
}
回复

使用道具 举报

16

主题

37

回帖

85

积分

初级会员

积分
85
 楼主| 发表于 2021-7-8 09:30:41 | 显示全部楼层
zeroall 发表于 2021-7-8 09:04
调用my_malloc(),呢。
void * my_malloc (unsigned int size)
{

这样的方式申请是不是也不会使用到内部内存,由于初始化没有初始化内部内存
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2021-7-8 09:36:33 | 显示全部楼层
zeroall 发表于 2021-7-8 09:04
调用my_malloc(),呢。
void * my_malloc (unsigned int size)
{

开关中断不好,因为申请时间不是固定的,有时候时间略长,影响中断实时性,OS下考虑用调度锁。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2021-7-8 09:37:52 | 显示全部楼层
zeroall 发表于 2021-7-8 09:30
这样的方式申请是不是也不会使用到内部内存,由于初始化没有初始化内部内存

1 内部SRAM无需初始化,上电就可以自由访问
2 是否申请了,这个是你自己决定的,你设置malloc用的那个存储区,他就申请那个。
回复

使用道具 举报

16

主题

37

回帖

85

积分

初级会员

积分
85
 楼主| 发表于 2021-7-8 16:36:46 | 显示全部楼层
eric2013 发表于 2021-7-8 09:37
1 内部SRAM无需初始化,上电就可以自由访问
2 是否申请了,这个是你自己决定的,你设置malloc用的那个存 ...

了解了 多谢 硬汉哥
回复

使用道具 举报

4

主题

9

回帖

21

积分

新手上路

积分
21
发表于 2021-7-10 11:09:16 | 显示全部楼层
硬汉哥,如果在stm32cube ide中使用6块内存的方式动态分配,mdk的配置可以兼容吗。cube ide 如何分散加载内存呢
回复

使用道具 举报

16

主题

37

回帖

85

积分

初级会员

积分
85
 楼主| 发表于 2021-8-4 20:13:48 来自手机 | 显示全部楼层
eric2013 发表于 2021-7-8 09:36
开关中断不好,因为申请时间不是固定的,有时候时间略长,影响中断实时性,OS下考虑用调度锁。

硬汉哥,是否有freertos 下内存管理的例子呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2021-8-5 08:36:32 | 显示全部楼层
zeroall 发表于 2021-8-4 20:13
硬汉哥,是否有freertos 下内存管理的例子呢

直接调用其API即可,很简单。无需例子。
回复

使用道具 举报

16

主题

37

回帖

85

积分

初级会员

积分
85
 楼主| 发表于 2021-8-5 10:49:52 | 显示全部楼层
eric2013 发表于 2021-8-5 08:36
直接调用其API即可,很简单。无需例子。

我想说的是 带操作系统的 ,动态申请外部sdram的例子。带操作系统申请外部sdram时候,是不是和裸机不同呢??
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106826
QQ
发表于 2021-8-6 08:05:16 | 显示全部楼层
zeroall 发表于 2021-8-5 10:49
我想说的是 带操作系统的 ,动态申请外部sdram的例子。带操作系统申请外部sdram时候,是不是和裸机不同呢 ...

加个互斥信号量,方便多任务调用即可。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 08:47 , Processed in 0.319039 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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