OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5723|回复: 2

STM32在KEIL下的工程,编译出来的MAP文件,关于RAM内存的分析

[复制链接]

1

主题

2

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2015-12-24
在线时间
1 小时
发表于 2015-12-24 11:32:58 | 显示全部楼层 |阅读模式
5金钱
主控CPU为STM32F207ZGT6,RAM 空间为128K,下图为MAP文件中,关于内存地址的分配(keil版本为4.72A)
[mw_shl_code=c,true] APBAHBPrescTable 0x20000000 Data 16 stm32f2xx_rcc.o(.data) .data 0x20000010 Section 16 stm32f2x7_eth.o(.data) .data 0x20000020 Section 4 dhcp.o(.data) xid 0x20000020 Data 4 dhcp.o(.data) .data 0x20000024 Section 13 mem.o(.data) ram 0x20000024 Data 4 mem.o(.data) ram_end 0x20000028 Data 4 mem.o(.data) lfree 0x2000002c Data 4 mem.o(.data) mem_sem 0x20000030 Data 1 mem.o(.data) .data 0x20000034 Section 12 netif.o(.data) netifnum 0x20000034 Data 1 netif.o(.data) .data 0x20000040 Section 4 raw.o(.data) raw_pcbs 0x20000040 Data 4 raw.o(.data) .data 0x20000044 Section 4 udp.o(.data) .data 0x20000048 Section 12 ip.o(.data) ip_id 0x20000048 Data 2 ip.o(.data) .data 0x20000054 Section 6 ip_frag.o(.data) reassdatagrams 0x20000054 Data 4 ip_frag.o(.data) ip_reass_pbufcount 0x20000058 Data 2 ip_frag.o(.data) .data 0x2000005a Section 1 etharp.o(.data) etharp_cached_entry 0x2000005a Data 1 etharp.o(.data) .data 0x2000005c Section 36 main.o(.data) .data 0x20000080 Section 12 netconf.o(.data) .data 0x2000008c Section 8 stm32f2xx_it.o(.data) .data 0x20000094 Section 44 app.o(.data) time 0x200000a4 Data 4 app.o(.data) LED_Flag 0x200000a8 Data 1 app.o(.data) s_sendcount 0x200000ac Data 4 app.o(.data) s_Net_Time 0x200000b0 Data 4 app.o(.data) s_h485tonet 0x200000b4 Data 4 app.o(.data) .data 0x200000c0 Section 14 h485.o(.data) Counter10ms 0x200000c3 Data 1 h485.o(.data) dev 0x200000c4 Data 1 h485.o(.data) .data 0x200000d0 Section 20 updata.o(.data) .data 0x200000e4 Section 4 systick.o(.data) Ticks 0x200000e4 Data 4 systick.o(.data) .data 0x200000e8 Section 8 udp_com.o(.data) drop_cnt 0x200000e8 Data 4 udp_com.o(.data) .data 0x200000f0 Section 4 stdout.o(.data) .bss 0x200000f4 Section 15572 stm32f2x7_eth.o(.bss) .bss 0x20003dc8 Section 4116 mem.o(.bss) ram_heap 0x20003dc8 Data 4116 mem.o(.bss) .bss 0x20004ddc Section 9947 memp.o(.bss) memp_tab 0x20004ddc Data 24 memp.o(.bss) memp_memory 0x20004df4 Data 9923 memp.o(.bss) .bss 0x200074b8 Section 200 etharp.o(.bss) arp_table 0x200074b8 Data 200 etharp.o(.bss) .bss 0x20007580 Section 52 netconf.o(.bss) .bss 0x200075b4 Section 4096 stm32f2xx_it.o(.bss) .bss 0x200085b4 Section 5904 app.o(.bss) .bss 0x20009cc4 Section 1024 crc32.o(.bss) .bss 0x2000a0c4 Section 5476 h485.o(.bss) .bss 0x2000b628 Section 2048 updata.o(.bss) read_data_buf 0x2000b628 Data 1024 updata.o(.bss) write_data_buf 0x2000ba28 Data 1024 updata.o(.bss) STACK 0x2000be28 Section 16384 startup_stm32f2xx.o(STACK)[/mw_shl_code]

上面红色标记 STACK 的起始地址为 0x2000be28
在这里有几个疑问:
1、栈空间是向低字节地址方向生长的,我定义的栈空间为16K Bytes,那么栈空间从 0x2000be28 地址向下生长,怎么会跟全局变量的地址write_data_buf 0x2000ba28地址重合呢
2、还有个疑问,就是堆空间在起始地址在哪里体现?我定义的堆空间大小为512字节

最佳答案

查看完整内容[请看2#楼]

1,堆栈是从0开始的,从0X2000 0000开始的地址算起。你定义16K,那么栈顶地址是0X2000 4000. 2,从0开始(以0x2000 0000为起点)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-12-24 11:32:59 | 显示全部楼层
1,堆栈是从0开始的,从0X2000 0000开始的地址算起。你定义16K,那么栈顶地址是0X2000 4000.
2,从0开始(以0x2000 0000为起点)
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2015-12-24
在线时间
1 小时
 楼主| 发表于 2015-12-25 09:40:08 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
谢谢你的耐心解释,现在彻底弄懂了,因为我用了LWIP的内存分配机制,所有STM32的堆被隐藏了,重新用C标准库,就能看到堆和栈的地址了.

拔出来你以前的帖子,http://www.openedv.com/posts/list/24152.htm

当使用C库编译,从Keil所编译的.map文件,可以看到堆和栈的地址,但不是从0x2000 0000开始的地址。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 15:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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