社区
VxWorks
帖子详情
为什么中断服务程序不允许有返回值啊?请各位高手指教,多谢
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
打赏
举报
回复
中断的本质意义是去处理突发事件,它的存在是为了处理一个过程,而不是一个特定的预期功能,所以从这去看,不允许参数,不允许返回值就很实在了....
不过可以通过变通的方法,小心地访问全局变量,就可以了.
呵呵
要小心哈
基于springboot的统一
返回值
和异常处理
希望更好的解决springboot 的控制层统一
返回值
和做全局异常处理的同学,这门课程将是不错的选择; 我将通过讲解3种的统一
返回值
实现方法,学习这门课程的人可以根据自己的实质需求进行选择引用到项目中!
Microsoft .Net Remoting系列专题之一:.Net Remoting基础篇
Microsoft .Net Remoting系列专题之一
一、Remoting基础
什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方式。从微软的产品角度来看,可以说Remoting就是DCOM的一种升级,它改善了很多功能,并极好的融合到.Net平台下。Microsoft® .NET Remoting 提供了一种
允许
对象通过应用程序域与另一对象进行交互的框架。这也正是我们使用Remoting的原因。为什么呢?在Windows操作系统中,是将应用
PB实用技巧
如何在PB5中自动生成行号 delelte数据窗口中若干行,然后update,出现: “rows changed between retrieve and update No changes made to database… Delete from table where ….”
请
教是何缘故,该数据窗口是updatable 的,未设置关键字。 如何能够作到,在打印一个DataWindows...
我在CSDN参与的3000个帖子
今日偶然翻到,感慨万千 1:申述:版主,是否扣了我的专家分? 2:100分急求,随机输出十个小写字母,但是,要求这十个字母不相同 3:求Sn=a+aa+aaa+…+aaa…a(n个a)之值 4:数组题 望
高手
帮忙! 5:呵呵,来推荐一下我的网站,本站提供大量当今流行的免费的音乐和免费电影,常用软件、游戏、精美图库下载,希望对网友有帮助!顺便散分! 6:VBA
请
教怎
编程资料 -C# 多线程
编程资料 - 多线程
C#多线程编程实例实战
作者: 刘弹 www.ASPCool.com 时间:2003-5-17 上午 10:24:05 阅读次数:10996
单个写入程序/多个阅读程序在.Net 类库中其实已经提供了实现,即
System.Threading.ReaderWriterLock 类。本文通过对常见的单个写入/多个阅读程序的分析来探索c#
的多线程编程。
问题的提出
所谓单个写入程序/多个阅读程序的线程同步问
VxWorks
2,179
社区成员
2,916
社区内容
发帖
与我相关
我的任务
VxWorks
xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
复制链接
扫一扫
分享
社区描述
xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章