如何查看程序栈的使用情况

电子说

1.2w人已加入

描述

 

开发环境:CS+ for CA,CX

MCU:RL78系列

仿真器:SF3000E1

程序的内存分配

一个由C/C++编译的程序占用的内存分为以下几个部分:

栈区(stack)由编译器自动分配释放,存放函数的参数值,局部变量的值等。

堆区(heap)一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。

全局区(静态区)(static)全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后有系统释放。

文字常量区—常量字符串就是放在这里的。程序结束后由系统释放。

程序代码区—存放函数体的二进制代码。

栈溢出的危害

栈溢出就是缓冲区溢出的一种。由于缓冲区溢出而使得有用的存储单元被改写,往往会引发不可预料的后果。程序在运行过程中,为了临时存取数据的需要,一般都要分配一些内存空间,通常称这些空间为缓冲区。如果向缓冲区中写入超过其本身长度的数据,以致于缓冲区无法容纳,就会造成缓冲区以外的存储单元被改写,这种现象就称为缓冲区溢出。缓冲区长度一般与用户自己定义的缓冲变量的类型有关。

如何查看程序栈的使用情况

针对瑞萨的RL78系列MCU去查看代码中使用了多少栈空间,可以按照如下步骤进行操作。

步骤一

请参照图1,打开CA78K0R(Build Tool)-->Compile options-->Debug Information选择Yes(Add to both assembly and object file)(-g2)

mcu

图1

步骤二

请参照图2,打开CA78K0R(Build Tool)-->Compile options-->Assembly file选择Yes(With no C source info)(-a)。

mcu

图2

步骤三

请参照图3,将工程项目进行编译。

mcu

图3

步骤四

请参照图4,打开Tool-->Startup Stack Usage Tracer,打开后会弹出如图5和图6的窗口。会显示我们每个源文件与每个函数所占用的栈空间大小。

mcu

图4

mcu

图5

mcu

图6

如图6栈空间使用情况例子说明

main函数使用的占空间为18个字节,计算是根据其调用的所有的函数的占空间使用的总和。其中调用的各个函数R_FDL_Write用到8个字节栈空间,R_FDL_Write用到8个字节栈空间,以及所有可以中断的栈空间。

mcu

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分