硬汉嵌入式论坛

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

关于STM32F429堆栈区域划分的问题

[复制链接]
回帖奖励 5 个金币 回复本帖可获得 5 个金币奖励! 每人限 1 次

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 2024-2-22 11:13:46 | 显示全部楼层 |阅读模式




工程文件中划分栈区大小4KB,堆区大小1KB


keil编译后
FLASH存储区域大小=Code + RO-data + RW-data=204KB
RAM存储区域大小=RW-data + ZI-data ROM=61KB


output.map文件里面
Execution Region ER_IROM1 (Exec base: 0x08000000, Load base: 0x08000000, Size: 0x00032c00, Max: 0x00200000, ABSOLUTE)
Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x08032c00, Size: 0x0000f7c0, Max: 0x00030000, ABSOLUTE, COMPRESSED[0x00000038])


    Total RW  Size (RW Data + ZI Data)             63424 (  61.94kB)
    Total ROM Size (Code + RO Data + RW Data)     207928 ( 203.05kB)




问题:
1.output.map文件中可以看出那些是堆区、那些是栈区吗(通过工程文件的堆栈大小和地址)?

2.output.map文件中 __initial_sp刚好占用了栈区设置的大小0x0000 1000,是什么意思?通过改变栈区大小,仅仅__initial_sp地址改变,其他变量在RAM地址不应该跟着变吗?栈区不是应该从空间首地址往下分配吗?

3.工程文件中设置的栈区大小0x0000 1000明显小于编译后所要占用的RAM空间,为什么程序没出问题?ps:程序中有大量的全局变量及数组,这些应该是存的RAM中吗?

期望高手解答一下,附件中有output.map文件,万分感激!








output.rar

40.38 KB, 下载次数: 2

output.map文件

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106856
QQ
发表于 2024-2-22 15:25:34 | 显示全部楼层

回帖奖励 +5 个金币

1、栈可以看这个,然后栈下面是堆
0x20003518        -       0x00001000   Zero   RW         1662    STACK               startup_stm32h743xx.o
2、RAM由高地址到低地址,分别是Stack,heap和其它变量。
3、这个为什么要出错,程序实际运行起来后,栈申请超出了才会出错。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 20:37 , Processed in 0.179311 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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