为什么中断服务程序不允许有返回值啊?请各位高手指教,多谢

szpyc 2007-10-05 05:09:24
看到过好多题目是给出一段有返回值的中断服务程序让找错误,答案是:中断服务程序不允许有返回值啊
中断服务程序只是由系统调用的,就不能有返回值么,是对寄存器有影响还是返回值没有意义,还是其他什么原因阿??
...全文
2434 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
接分是王道!
ajccn 2007-12-01
  • 打赏
  • 举报
回复
返回值的问题,用全局变量的方法来解决的。不过要注意除了该中断外,只能有一个地方去访问该全局变量,最好加个判断什么的,容易出现问题。例如碰到更高优先级的中断什么的,全局的变量的值不好控制。
greatchliu 2007-11-20
  • 打赏
  • 举报
回复
有返回值也没有问题,不会有人去判断,处理函数如下:

void mpc107EpicIntHandlerExec
(
UCHAR intVec
)
{
INT_HANDLER_DESC * pCurrHandler;

/* call each respective interrupt handler */

if ((pCurrHandler = sysIntTbl [intVec]) == NULL)
{
logMsg ("uninitalized PIC interrupt vector %x\r\n",
intVec, 0,0,0,0,0);
}
else
{

/* call Each respective chained interrupt handler */

while (pCurrHandler != NULL)
{
(*pCurrHandler->vec) (pCurrHandler->arg); /*这里调用的就是挂接的中断处理函数*/
pCurrHandler = pCurrHandler->next;
}
}
}
Cypher 2007-11-13
  • 打赏
  • 举报
回复
哪的题啊,考这个没什么意思。写一个有返回值的也无所谓,只是外层通常不会处理而已。

所谓中断不会返回原来点是对于进程、线程而已的,实际上中断处理程序外层通常还有一些汇编指令的包装,
总是先回到调用中断处理程序的地方,后续才可能切换任务;至少对于VxWorks来说肯定是这样的。

如果把中断处理的stub修改掉,也可以处理返回值。
土豆 2007-11-07
  • 打赏
  • 举报
回复
为什么要有返回值?你有不是在写函数。我认为有2原因,一个原因是不需要;另外一个原因是为了让中断处理程序简单,你当然可以把什么功能都放中断处理里,但是那样还是中断处理程序吗?如果中断处理程序太复杂了,会花太多时间,那样中断就失去意义了,而且还容易引入新的错误,很难处理。

我觉得不应该老是盯在一个点上,关键是你把系统的原理想清楚了,这些问题就不需要问了。
szpyc 2007-11-05
  • 打赏
  • 举报
回复
OK,明白了,返回值是没什么用处!多谢各位指点~~
Heaven_Redsky 2007-11-05
  • 打赏
  • 举报
回复
个人的一点理解
如果说中断服务程序有返回值,那么它的值返回给谁呢?
在系统的运行过程中,一定是某种中断源出发了相应的中断,系统上挂接的中断服务程序进行现场的处理,例如告警等操作,然后清中断。
也就是说,中断服务程序链接在某一类中断源上,而这些中断源的产生是随机的,所以,中断服务程序并没有一个固定的调用者,也没有固定的返回地址,所以返回值也没有用吧。
lailaiququ 2007-11-05
  • 打赏
  • 举报
回复
硬件中断返回的是原来的地方,但这个“原来的地方”却是随机的。
而一般子程序则是确定的调用处,软中断与子程序类似。
zhengcaiyin 2007-11-04
  • 打赏
  • 举报
回复
lailaiququ

兄弟说得对啊,


中断返回到不能保证回到原来的地方。 返回值也没有任何意义,




lailaiququ 2007-11-03
  • 打赏
  • 举报
回复
硬件中断的返回点是不确定的,也就是现场不能处理返回值。
如果你在中断里压栈作为返回值,而应用程序不处理自然爆掉了。
中断程序里当然可以压栈,但返回前要弹出。

szpyc 2007-11-02
  • 打赏
  • 举报
回复 1
to:hefuhua
好像以前在哪里见过,说中断是可以压栈的吧,而且中断时可以进行一些指针和寄存器的压栈操作!
下面是一种说法(其他高手说的)
中断处理的压栈对象依赖于MCU的实现,某些MCU支持一个单独的中断堆栈,在这种情况下自然压入专门的中断堆栈,而一些MCU不支持单独的中断堆栈,OS会相应的将中断堆栈实现在被中断任务的堆栈中,则可以认为是压入被中断任务的堆栈


如果像上边这样的话那中断可以压栈也就可以容纳返回值啊?到底是因为不需要而不返回还是什么原因?

to:amaverick,我马上去看,这方面看的很少,发现软件搞到一定程度对硬件层面不了解就很难深入了,谢谢
freeman_madcat 2007-10-25
  • 打赏
  • 举报
回复 1
终端处理函数与一般子函数的区别,
硬件原理都不一样。
还是复习下微机原理吧。
hefuhua 2007-10-07
  • 打赏
  • 举报
回复
中断不能压栈,所以不能有返回值,如果能压栈的话很快内存空间没了..并且中断特点就是在任何时候进行的并且保护现场的,如果要记住入口点和出口点不是重复,那么中断没有意义
lbing7 2007-10-07
  • 打赏
  • 举报
回复
中断的本质意义是去处理突发事件,它的存在是为了处理一个过程,而不是一个特定的预期功能,所以从这去看,不允许参数,不允许返回值就很实在了....

不过可以通过变通的方法,小心地访问全局变量,就可以了.

呵呵

要小心哈

2,179

社区成员

发帖
与我相关
我的任务
社区描述
xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
社区管理员
  • VxWorks开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧