打印
[AVR单片机]

奇怪的问题,调用子函数时压栈的不是下一句的地址

[复制链接]
1991|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a1z26|  楼主 | 2009-11-30 20:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用AVR Dragon调试Atmega16,将程序下载到芯片单步运行,发现调用子函数时压栈的并不是下一条语句的地址,但能正确返回。这是什么缘故?在IAR for AVR和AVR
Studio下均有此问题。比方说

    地址            代码
   0x198         call USART_Init
   0x19C         ...........

在进入USART_Init时,应该把0x19C压栈,但硬件仿真时实际压栈的值是0x20CE,
不知道这个是怎么来的?

相关帖子

沙发
Karlshen| | 2009-11-30 21:09 | 只看该作者
不懂···

使用特权

评论回复
板凳
huamunv| | 2009-12-1 13:30 | 只看该作者
要进行子函数的调用,则必须对寄存器进行压栈保护。

使用特权

评论回复
地板
suoma| | 2009-12-1 16:56 | 只看该作者
看一下压栈之前需要注意些什么

使用特权

评论回复
5
a1z26|  楼主 | 2009-12-3 08:01 | 只看该作者
我用C写的程序,寄存器保护是自动完成的。昨天在AVR Studio下试了试,也有此问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

214

帖子

0

粉丝