关于单片机在调用子程序时,进行了怎样的堆栈操作

单片机在调用子程序时,进行了怎样的堆栈操作?除了断点的PC值入栈,还有哪些东西呢?比如临时变量?!有人说临时变量不入栈,那CPU从子程序运行退回断点时,临时变量的值是如何... 单片机在调用子程序时,进行了怎样的堆栈操作?除了断点的PC值入栈,还有哪些东西呢?比如临时变量?!有人说临时变量不入栈,那CPU从子程序运行退回断点时,临时变量的值是如何恢复的呢?还是说临时变量只是在C语言上的定义形式,在汇编里本质上也是全局RAM,所以在退回时只要按原先的地址继续调用,仍然是调用子程序前的值。 展开
 我来答
一剑出血
高粉答主

2013-10-12 · 醉心答题,欢迎关注
知道大有可为答主
回答量:5.7万
采纳率:78%
帮助的人:1.7亿
展开全部
“断点的PC值入栈,还有哪些东西呢?”
取决于子程序的类型和编程方式。有些特殊类型的子程序是需要入栈的,若采用高级语言编程则编译器会自动添加相应的入栈出栈语句。

“有人说临时变量不入栈,那CPU从子程序运行退回断点时,临时变量的值是如何恢复的呢?”
呵呵,为何要恢复?调用子程序的时候会从局部变量块中新分配空间的,如同你后半部分所说。
更多追问追答
追问
但是不管是临时变量还是全局变量,其占用的RAM都是在单片机的用户RAM区的吧(假设是只有256BRAM的51单片机)?既然这样,那不管是临时变量还是全局变量所占用的RAM单元比如,如果不刷新它的值,按道理它在掉电前一直都是一个固定的值。
追答
“但是不管是临时变量还是全局变量,其占用的RAM都是在单片机的用户RAM区的吧”
是的

“既然这样,那不管是临时变量还是全局变量所占用的RAM单元比如,如果不刷新它的值,按道理它在掉电前一直都是一个固定的值”
不是。非静态的局部变量是可以重叠分配的。
zn123717885
2013-10-12 · TA获得超过1033个赞
知道小有建树答主
回答量:771
采纳率:52%
帮助的人:119万
展开全部
可重入函数调用时,被调函数内部临时变量要入栈。数据之所以入栈是因为空间资源重合了,需要保护原数据。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2013-10-12 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
单片机在调用子程序时,进行了怎样的堆栈操作?除了断点的PC值入栈,还有哪些东西呢?

--没有其它的了。

比如临时变量?!有人说临时变量不入栈,那CPU从子程序运行退回断点时,临时变量的值是如何恢复的呢?还是说临时变量只是在C语言上的定义形式,...

--C语言,并没有子程序。
--C语言,称为函数。
--概念不能混用。

--调用C函数时,参数的传递方法,返回值的传递方法,各有好几种:单个数值、数组、指针...,讲起来,得用好几页,还是看书去吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ff4aba5
2015-10-22 · TA获得超过4.8万个赞
知道大有可为答主
回答量:2.1万
采纳率:93%
帮助的人:3702万
展开全部
栈: 在函数调用时,第一个进栈的是主函数中函数调用后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。
当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中的下一条指令,程序由该点继续运行。
堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式