3528|7

86

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

两次遇到的面试题目求解 [复制链接]

AT89C51为8051系列中比较通用的1个芯片,如果用C语言编写程序,子函数可以被调用最大多少层,为什么?


不知道怎么考虑
从RAM空间,堆栈深度考虑吗?
C语言调用函数时,入栈的除了ACC,DPTR,通用寄存器还有什么,子函数被调用时单片机是如何动作的

最新回复

我试了一下,keil,如果最简单的函数调用,128字节子函数调用可以达64层,只 有PC入栈,SP初始化为0x00h. 有些情况下,子函数调用层数可以是无穷大。如果所有函数返回地址相同,经编 译器优化,那么只有一次PC入栈。  详情 回复 发表于 2007-8-15 17:50
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
跟编译器有一些关系,象Keil要求函数嵌套调用最大为10层。
主要是从RAM空间,堆栈深度考虑,象一个最简单的无参数的函数调用,每次都要存储两个字节的程序计数器的值.再就是函数的参数传递也是用的内存中的堆栈。这个也要考虑,不过一般建议控制在3-5层内。
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这个应该是和SP的字长和RAM的值作主要依据吧???
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

4
 
AT89C51的RAM空间为128字节,其中可作为堆栈区的最大空间为120字节。某次函
数调用,至少将PC(2 byte)入栈,当所调用函数为空函数,则函数最大嵌套层数
为60层。

对吗?
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

5
 
好象有8个字节固定被使用了,不能被做堆栈啊?我本人觉得,这个题目不是要得到一个明确的答案啊,主要是看你的考虑问题的方法和对MCU内部结构的了解!
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

6
 
靠,这个题没有答案,你定义的变量都是占用队战的,比如全局变量
你定义多了调用的层就少了,8951向下声称对站
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

7
 
你的考虑方向是对的,保存什么寄存器都应该可以配置。
子函数调用的时候要将返回地址以及函数需要的参数push道stack中
then jump to the function  and execute it

至于社么要保存,那得看你实际你用了哪些寄存器,
你用的都得保存,但是你用C写的话并不关心什么寄存器,编译器会帮你做的。但是仍然是可以配置的。

 
 
 

回复

101

帖子

0

TA的资源

一粒金砂(初级)

8
 
我试了一下,keil,如果最简单的函数调用,128字节子函数调用可以达64层,只
有PC入栈,SP初始化为0x00h.
有些情况下,子函数调用层数可以是无穷大。如果所有函数返回地址相同,经编
译器优化,那么只有一次PC入栈。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表