搜索
bottom↓
回复: 4

ICC编译器编译的中断服务程序:为什么不使用硬件堆栈,而只使用软堆呢(Y寄存器)呢?

[复制链接]

出0入0汤圆

发表于 2009-4-21 08:46:41 | 显示全部楼层 |阅读模式
以下是ICC的内存映像:

//////////////////////////////////////////////
硬件堆栈区                                       高地址
//////////////////////////////////////////////
软件堆栈区
//////////////////////////////////////////////
全局变量和字符串区
//////////////////////////////////////////////
I/O寄存器区
//////////////////////////////////////////////
CPU寄存器区                                       低地址
//////////////////////////////////////////////


以下是一个实际的程序,有关定时中断服务程序出栈时的代码:
1616 0990              ld R0,y+
1618 0FBE              out 0x3f,R0
161A F991              ld R31,y+
161C E991              ld R30,y+
161E B991              ld R27,y+
1620 A991              ld R26,y+
1622 9991              ld R25,y+
1624 8991              ld R24,y+
1626 3991              ld R19,y+
1628 2991              ld R18,y+
162A 1991              ld R17,y+
162C 0991              ld R16,y+
162E 9990              ld R9,y+
1630 8990              ld R8,y+
1632 7990              ld R7,y+
1634 6990              ld R6,y+
1636 5990              ld R5,y+
1638 4990              ld R4,y+
163A 3990              ld R3,y+
163C 2990              ld R2,y+
163E 1990              ld R1,y+
1640 0990              ld R0,y+
1642 1895              reti

 然而却没有发现入栈时的代码,为什么呢?

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2009-4-21 15:31:38 | 显示全部楼层
硬件堆栈是必要的,因为CALL语句,响应中断过程中的断点保护都必须依赖硬件堆栈,这是AVR的指令定死的。

但是中断现场保护不一定非使用硬件堆栈(PUSH、POP),使用其它RAM空间也是可以的。

出0入0汤圆

 楼主| 发表于 2009-4-22 08:59:19 | 显示全部楼层
谢谢。
  uC/OS-II中,每个任务都有一个栈,记录自己的堆栈的栈顶指针。
  我在想,如果ICC编译器允许中断嵌套,每个中断服务程序是如何记录自己的Y寄存器首地址的呢?(即:每个中断服务程序恢复现场时,是如何得到自己的软堆栈栈顶指针呢?)

出0入0汤圆

发表于 2009-4-23 11:29:29 | 显示全部楼层
软堆栈同硬堆栈的操作有什么区别吗?

Y寄存器的地址是固定的,里面就是软堆栈的栈顶指针,只要压几个,弹几个就可以了。

还是基础不扎实。

出0入0汤圆

 楼主| 发表于 2009-4-23 17:33:07 | 显示全部楼层
明白了。
  Y寄存器就是软堆栈栈顶指针。恢复现场时,只需要依次执行Y+即可(类似SP+)。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-2 23:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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