开发环境: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)

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

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

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

图4

图5

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

审核编辑:汤梓红
-
mcu
+关注
关注
147文章
18605浏览量
387052 -
程序
+关注
关注
117文章
3836浏览量
84762 -
编译器
+关注
关注
1文章
1669浏览量
51082
发布评论请先 登录
查看Linux系统内存使用情况的几种方法
rtthread编译后如何查看堆栈空间使用情况?
CUBEIDE运行完可以看RAM的使用情况,运行中可以实时查看RAM的使用情况吗?
如何查看RAM使用情况?
STM32H7的FLASH,RAM和栈使用情况
SoC如何查看内存使用情况
Windows查看电源使用情况
如何在应用程序调试期间分析栈和堆使用情况

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