msp430栈空间分析,栈移除位置分析

map文件解析

编译环境:IAR for MSP430 5.50.2
MCU:MSP430F4793( 60K ROM 2.5K RAM )
DATA16_AN:本地未初始化数据(寄存器变量)寄存器变量
DATA16_AC:绝对地址常量 (使用@绝对地址)
DATA16_N:静态和全局未初始化变量(_ _no_init _ _data16 static and global variables)
DATA16_I:静态和全局初始化变量
DATA16_Z:初始化为0的静态和全局变量
DATA16_C:常量
DATA16_ID:DATA16_I中保持初始化值的静态和全局初始化变量
CODE:代码区
CSTART:启动代码区
INTVEC:中断向量表(interrupt vector)
RESET:复位向量(reset vector)

编译之后的map文件最下面三行信息:

36556 bytes of CODE memory
2538 bytes of DATA memory (+ 63 absolute )
246 bytes of CONST memory (+ 23382 absolute )
1
2
3
36 556 bytes of CODE memory
范围:1100-FFDF(占用MCU的ROM)
36 556:代码大小(CODE,CSTART)

2 538 bytes of DATA memory (+ 63 absolute )
范围:0200-0BFF
2538:占用RAM的大小(DATA16_I,DATA16_Z,DATA16_N,TLS16_I,DATA16,CSTACK)
范围:0000-01FF
63:调用的寄存器变量大小(DATA16_AN,不占用单片机RAM)

246 bytes of CONST memory (+ 23 382 absolute )
范围:1100-FFDF(占用MCU的ROM)
246:常量大小(DATA16_C)
23382:绝对地址常量大小(DATA16_AC)

参考博文

------------------------------以上内容参考他人---------------------------------------


栈分析

经过分析栈的深度可以通过map文件的CSTACK得到,CSTACK代表调用这个函数需要的栈空间大小

在这里插入图片描述

堆栈大小设置

在这里插入图片描述

修改后栈空间在map文件中显示位置
在这里插入图片描述

默认栈大小

在这里插入图片描述

生成map文件

在这里插入图片描述

分析栈空间大小

communication_up函数分析

  1. 函数地址在9FD8 - A021 一共(0x4a 字节)
  2. 调用该函数的位置仅仅有classfy_parse这个地方
  3. 这里的栈为8

在这里插入图片描述

在这里插入图片描述

create_header函数分析

  1. 函数地址在8F52 - 8FCB 一共(0x7a 字节)
  2. 调用该函数的位置有14地方这个地方
  3. 这里的栈为4

在这里插入图片描述

引用位置

在这里插入图片描述

read_rtc_rx8130函数分析

在这里插入图片描述

read_hos_data_from_index函数分析

在这里插入图片描述

栈溢出可能位置

  1. 这里申请了0xdc 大小的空间,默认时80字节栈,实际这里使用了220个字节,这就可能导致栈移除

在这里插入图片描述
2. 这里又有可能不会移除,移植栈是向下生长的,如果向下有足够的没有使用的空间,也就不会导致程序崩溃,毕竟他不会破坏有用的数据空间,如下图所示,栈空间特别足,不会使用到全局或静态变量的空间

在这里插入图片描述

  • 15
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Car12

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值