搜索
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU

请问 STM32F407ZGT6 内存大小的问题

[复制链接]
685|15
 楼主 | 2021-2-22 15:17 | 显示全部楼层 |阅读模式
ST, AC, ck

型号:STM32F407ZGT6,  Heap_Size       EQU     0x00000700 可以编译通过,Heap_Size       EQU     0x00000800  就出错了?




int main(void)
{
        char* p1 = (char*) malloc(1024);
       
        if(p1==NULL)
        {
                char a;
                a='a';
        }

}


Error: L6406E: No space in execution regions with .ANY selector matching system_stm32f4xx.o(.data).

请问是什么原因啊。

Stack_Size      EQU     0x00000400
                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp

; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Heap_Size       EQU     0x00000800

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit

                PRESERVE8
                THUMB


使用特权

评论回复
| 2021-2-22 20:25 | 显示全部楼层

使用特权

评论回复
 楼主 | 2021-2-23 08:50 | 显示全部楼层
香水城 发表于 2021-2-22 20:25
内存是有限的。
关于STM32启动文件的几个小问题

谢谢指点,可是F407这个内存是192k,我分配的也没那么多啊?

使用特权

评论回复
| 2021-2-23 09:17 | 显示全部楼层
gisapple 发表于 2021-2-23 08:50
谢谢指点,可是F407这个内存是192k,我分配的也没那么多啊?

Stack_Size      EQU     0xc000
;Stack_Size      EQU     0x00000010

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp


; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Heap_Size       EQU     0x00000800
;Heap_Size       EQU     0x00000800

我这都没问题,是不你的程序其它变量太多了

使用特权

评论回复
 楼主 | 2021-2-23 10:07 | 显示全部楼层
ayb_ice 发表于 2021-2-23 09:17
Stack_Size      EQU     0xc000
;Stack_Size      EQU     0x00000010

看 map 文件也没占满192k啊?


      Code (inc. data)   RO Data    RW Data    ZI Data      Debug   

     41076       3562       3088        604     130308     425331   Grand Totals
     41076       3562       3088        256     130308     425331   ELF Image Totals (compressed)
     41076       3562       3088        256          0          0   ROM Totals

==============================================================================

    Total RO  Size (Code + RO Data)                44164 (  43.13kB)
    Total RW  Size (RW Data + ZI Data)            130912 ( 127.84kB)
    Total ROM Size (Code + RO Data + RW Data)      44420 (  43.38kB)

==============================================================================

使用特权

评论回复
| 2021-2-23 10:23 | 显示全部楼层
本帖最后由 sonicll 于 2021-2-23 10:28 编辑

看看你的IRAM地址范围是怎么设置的?F407的192K,实际是三块,112+16+64,最后那64K和前面的128K在地址上不是连续的

使用特权

评论回复
| 2021-2-23 10:27 | 显示全部楼层
gisapple 发表于 2021-2-23 10:07
看 map 文件也没占满192k啊?

那个192K的RAM不是连续的,分为128+64,一般情况64K可能没有配置打开,因为有些限制

使用特权

评论回复
 楼主 | 2021-2-23 10:28 | 显示全部楼层
sonicll 发表于 2021-2-23 10:23
看看你的IRAM地址范围是怎么设置的?

D:\学习资料\单片机\IRAM.PNG

使用特权

评论回复
 楼主 | 2021-2-23 10:30 | 显示全部楼层

IRAM1  start 0x20000000  size 0x20000

使用特权

评论回复
| 2021-2-23 10:43 | 显示全部楼层
gisapple 发表于 2021-2-23 10:30
IRAM1  start 0x20000000  size 0x20000

你这个只有128K,还需要添加另一块64K的地址
IRAM2 start 0x10000000  size 0x10000

使用特权

评论回复
| 2021-2-23 11:40 | 显示全部楼层
192K 并不是在一块连续的内存地址了,你首先要搞明白你的Heap_Size 是被分配到哪一块了,这一块的内存有多少剩余,然后你才可以分配。

使用特权

评论回复
| 2021-2-23 22:23 | 显示全部楼层
你可以进一步打开map文件看看,是不是别的什么用了不少RAM。

考虑到两块RAM的不连续,有需要的话可以做些自行指定地址空间。

使用特权

评论回复
 楼主 | 2021-2-24 08:25 | 显示全部楼层
sonicll 发表于 2021-2-23 10:43
你这个只有128K,还需要添加另一块64K的地址
IRAM2 start 0x10000000  size 0x10000

谢谢各位大神,

IRAM1  start 0x20000000  size 0x20000
IRAM2 start 0x10000000  size 0x10000


Heap_Size       EQU     0x00002800
现在可以编译成功了。

    Total RO  Size (Code + RO Data)                44276 (  43.24kB)
    Total RW  Size (RW Data + ZI Data)            139360 ( 136.09kB)
    Total ROM Size (Code + RO Data + RW Data)      44536 (  43.49kB)

但是 运行异常,程序不对了,使用了DCMI_Cmd(ENABLE);        //DCMIʹÄÜ
DCMI 和 IRAM2  有冲突?

使用特权

评论回复
| 2021-2-24 08:30 | 显示全部楼层
gisapple 发表于 2021-2-24 08:25
谢谢各位大神,

IRAM1  start 0x20000000  size 0x20000

那个64K的RAM是有限制的,只能被CPU访问,需要特别注意,都不看手册的吗

使用特权

评论回复
 楼主 | 2021-2-24 08:58 | 显示全部楼层
ayb_ice 发表于 2021-2-24 08:30
那个64K的RAM是有限制的,只能被CPU访问,需要特别注意,都不看手册的吗

谢谢,64K的没想给DCMI DMA用啊,是要给cpu用的 malloc(n)这样,可是系统自己好像分配错乱了,如何控制这64k给cpu使用,不让DCMI DMA用呢

使用特权

评论回复
| 2021-2-24 09:35 | 显示全部楼层
gisapple 发表于 2021-2-24 08:58
谢谢,64K的没想给DCMI DMA用啊,是要给cpu用的 malloc(n)这样,可是系统自己好像分配错乱了,如何控制这 ...

可以把一些大的全局数组分配给他,绝对定位或者强制转换

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表