找回密码
 注册
关于网站域名变更的通知
查看: 347|回复: 1
打印 上一主题 下一主题

[毕业设计] 单片机程序调试过程中的常见问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-3-16 16:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
在编写子程序时,有些应用者不利用返回指令RET,而习惯利用对应的跳转指令跳到对应的“目的地"。这种程序存在一一个隐含的“弊端”:即使在软件调试过程中汇编成功,甚至程序能够实现- -定的功能,但很有可能会"死机"或出现其他的故障。因为在调用子程序时,机器会自动将当前的PC值(当前执行指令的下一条指令存储的地址)压入堆栈,但是若在子程序中通过跳转指令返回,机器就不会弹出压入堆栈的PC值。这就意味着在间接地使SP增加,若多次调用该子程序,那么SP就-直在增加,这造成了内部RAM中的内容被逐渐修改(其修改的内容是不确定的值)。而内部RAM往往是中间存储变量,当SP增加到中间变量的位置时,就会修改中间变量的值,从而导致程序出错。因此在使用跳转指令跳出子程序时要利用两条POP指令将压入堆栈的PC值弹出,即执行完子程序以后要保证SP的值恢复到进入子程序SP所设置的初值。5 _% P; W" n/ z/ a' w0 S) O
游客,如果您要查看本帖隐藏内容请回复
: ~  |7 |0 b+ k1 K7 @/ n" i
/ ^- U7 `( b- G" W$ h9 q

该用户从未签到

2#
发表于 2020-3-16 16:34 | 只看该作者
这就意味着在间接地使SP增加,若多次调用该子程序,那么SP就-直在增加,这造成了内部RAM中的内容被逐渐修改(其修改的内容是不确定的值)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-30 11:47 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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