.map文件分析

在IAR的工程的Output文件夹中有个.map文件,该文件说明了各个函数占用的尺寸和地址。

"A0":  place at 0x08000000 { ro section .intvec };
"P1":  place in [from 0x08000000 to 0x08007fff] { ro };
"P2":  place in [from 0x20000000 to 0x200027ff] { rw, block CSTACK, block HEAP };

A0上面是MSP初始地址、PC初始地址以及中断向量表


P1上面是程序段,包括.text(程序)及.rodata(只读数据,一般是常量值) 
.text(程序):2字节对齐,用户自定义的程序、标准库程序、startup_stm32f10x_ld的程序,以及初始化变量的函数 zero_init3的程序

.rodata(只读数据,一般是常量值):用户自定义的程序中的常量(比如常量字符串和#define定义的常量等,如果是字符串还要算上结尾的/0,4字节对齐),copy_init3函数中的常量、用于掉电存储的数据


P1上面是SRAM数据,包括.data、cstack、.bss

.data: inited ,通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配

.bss:zero,通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文BlockStarted by Symbol的简称。BSS段属于静态内存分配。

cstack:函数局部变量用的区域,所有的功能函数使用的局部变量都是从这个堆栈申请使用的,用完了再还回去。子函数里面用到的局部变量都是在这里面取来用的.例如:
void Fn(void)
{
     unsigned char TT[64];
}

TT[64] 就会从CSTACK取出来用,用完后TT没用了,就可以还给CSTACK了,当子函数使用局部变量太多的时候,要注意CSTACK尺寸.

对应的还有RSTACK 程序返回用的,保存的是程序调用函数的返回地址  , 你填写的数值 X 2才是占用的字节数,例如,你填写10,那么RSTACK尺寸是20字节,可以函数嵌套10层左右

参考链接:https://www.amobbs.com/thread-3280855-1-1.html

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值