找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7637|回复: 11
打印 上一主题 下一主题
收起左侧

单片机可以执行多少次嵌套?原因是什么?

  [复制链接]
跳转到指定楼层
楼主
ID:488693 发表于 2019-3-12 15:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

来自 2#
ID:401564 发表于 2019-3-12 23:54 | 只看该作者
这个和单片机的硬件有关的,很多人是以8051的C语言开始学习的,8051的堆栈是程序自动分配的软件堆栈,理论上来说从030H到0FFH都可以作为堆栈,大概200层吧,那么在C中,大概就能嵌套200层,至少理论上来说是这样的
但别的单片机就不一样的了,有的是使用硬件堆栈,合泰单片机就是这样的硬件堆栈,有的型号只有4层硬件堆栈,也就是说最多只能嵌套4层,PIC的单片机也是大概如此,像这种硬件堆栈,而且只有几层堆栈的单片机,一般是不会嵌套的,函数的递归也是不允许的,就是中断函数里面都不用函数之类的要用到堆栈的语句

评分

参与人数 1黑币 +60 收起 理由
admin + 60 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:483991 发表于 2019-3-12 17:14 | 只看该作者
如果设计合理,N次嵌套都不是个事

评分

参与人数 3黑币 +26 收起 理由
areyouok + 6
Sawardeakar + 10 赞一个!
春风十里吹 + 10 很给力!

查看全部评分

回复

使用道具 举报

地板
ID:277976 发表于 2019-3-12 18:47 | 只看该作者
堆栈应该是跟C编译器有关和开辟的堆栈区空间的大小有关。因此,子程序能嵌套多少层是跟C编译器有关和开辟的堆栈区空间的大小有关。有的C编译器在编译时,如果溢出会有警告或者出错的提示,但是也有的C编译器如果溢出却不会有警告或者出错的提示,毕竟C编译器也是一种人为的软件,不同的版本也可能存在差异。我自己也开发过编译器的子程序嵌套的功能,因此我深知子程序的嵌套肯定是有层数限制的,嵌套越少越安全。我平时用keil4 编译M3和M4核的单片机,一般是把嵌套数控制在4层左右以内。应该以实际为准,如果程序出现了莫名其妙的明显错误,可以考虑是不是嵌套层数太多或者堆栈溢出的问题。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:80221 发表于 2019-3-12 19:34 | 只看该作者
若是中断嵌套,最好都不要写这种代码。应当拒绝浪费内存这种无意义行为
回复

使用道具 举报

6#
ID:391730 发表于 2019-12-9 18:30 | 只看该作者
亲测,5层栈溢出
回复

使用道具 举报

7#
ID:391730 发表于 2019-12-9 18:32 | 只看该作者
正规007 发表于 2019-3-12 17:14
如果设计合理,N次嵌套都不是个事

胡说!你试试最简单的递归看看!
回复

使用道具 举报

8#
ID:235200 发表于 2019-12-9 23:26 | 只看该作者
Y_G_G 发表于 2019-3-12 23:54
这个和单片机的硬件有关的,很多人是以8051的C语言开始学习的,8051的堆栈是程序自动分配的软件堆栈,理论上来 ...

8051单片机即使把08H-FFH所有内存都作为堆栈,也不会有200层,因为只有240个存储单元,而第一个断点都有2个字节的地址需自动存入,这样也只有120层,如果程序真有120层调用,每一层的中间运行数据将无存储空间可用,一般编写程序都需要留出足够的内存空间供变量使用,堆栈移至内存的尾部,大概占16-30个字节地址,程序嵌套建议不超过8层为好

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

9#
ID:532541 发表于 2019-12-13 08:16 | 只看该作者
嵌套的层数与堆栈的深度有关,每次调用子程序,或者相应中断,都要在堆栈中保留返回值,如何堆栈满了,再嵌套,就无法返回了。我用过最PIC16c57,硬件堆栈2级。。 若是标准的51单片机,堆栈在128B的RAM中可以自己设置指针,但是R0-R7 用户的数据要占用一些RAM 剩余的可做堆栈,每次入栈2字节,可以计算出能嵌套多少次了,52多了128B的RAM 可以用l来做堆栈 128B的堆栈可以嵌套64次。当然每次嵌套要保存数据还需要RAM。
回复

使用道具 举报

10#
ID:416239 发表于 2019-12-13 14:56 | 只看该作者
我用过最多4次
回复

使用道具 举报

11#
ID:663288 发表于 2019-12-13 15:30 | 只看该作者
不同的单片机可以执行的嵌套也不同,RAM大的单片机,多少级都是随便的
回复

使用道具 举报

12#
ID:426861 发表于 2019-12-13 16:53 | 只看该作者
受限于单片机硬件和C语言规范
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表