请教中断服务子程序ISR的问题

andyhanjun 2009-07-09 10:39:00
我在网上看到说ISR不能有返回值和参数,可是在wince的ISR,OEMInterruptHandle()这个函数中既有返回值也有参数啊,这个OEMInterruptHandle函数就是单ISR模型的中断服务子程序啊。
原文如下:

一、ISR(中断服务子函数)
首先来看一段错误的ISR代码:
_interrupt double compute_area(double radius)
{
printf("\n Area=%f",area);
return area;
}
你能看出其中的错误
中断嵌入式系统中重要组成部分,很多编译器开发商都让标准c支持中断,并引入关键字_interrupt.但是:
1、ISR不能有返回值
2、ISR不能传递参数;
3、ISR应该是短而高效的,在ISR中做浮点运算是不明智的;
4、ISR中不应该有重入和性能上的问题,因此不应该使用pintf()函数。

...全文
1704 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
裸奔的时候确实中断不能传入和传出参数的,挂系统上的中断服务程序一般都是注册用的
rushonin 2009-07-10
  • 打赏
  • 举报
回复
sorry ,我说错了. oal_intrinit 会初始化系统中断和硬件中断表.
ISR会对照这个表,向系统通知系统中断,至于ISR内部如何,我没研究过.
rushonin 2009-07-10
  • 打赏
  • 举报
回复
我见的ISR一般都有返回值和参数的, 最简单的ISR是将硬件中断映射为系统中断并返回.
gooogleman 2009-07-10
  • 打赏
  • 举报
回复
在PB的kernel部分代码,
汇编的。我看过
paulfuture 2009-07-10
  • 打赏
  • 举报
回复
OEMInterruptHandle函数,既有参数,又有返回值
paulfuture 2009-07-10
  • 打赏
  • 举报
回复
OEMInterruptHandle是操作系统自动调用的吧?
wohuazhen 2009-07-09
  • 打赏
  • 举报
回复
3楼:wince的OEMInterruptHandle是winc中断处理函数中的一个。
去找找谁调用了OEMInterruptHandle了它吧。一直找到中断入口。
hugohong 2009-07-09
  • 打赏
  • 举报
回复
所谓裸奔,就是没有操作系统,像单片机那样,我没弄个单片机,不知道对不对,GM?
seu_dust 2009-07-09
  • 打赏
  • 举报
回复
裸奔就是不上操作系统,每个操作系统都有自己的中断机制。wince的OEMInterruptHandle是winc中断处理函数中的一个。
andyhanjun 2009-07-09
  • 打赏
  • 举报
回复
gooogleman回答的真快啊,经常看你的blog,写的很好,上面的原文我也是在网上找到的,请问lz,什么叫裸奔,我是新手,请见谅
gooogleman 2009-07-09
  • 打赏
  • 举报
回复
设计不一样。

你这个是裸奔的时候的规定吧。
andyhanjun 2009-07-09
  • 打赏
  • 举报
回复
我找遍了PB下所有的文件,都没有找到是谁调用了这个OEMInterruptHandle函数啊
andyhanjun 2009-07-09
  • 打赏
  • 举报
回复
中断处理函数应该是在中断产生以后,操作系统的异常处理机制自动调用的吧,怎么去找是谁调用了它呢。
andyhanjun 2009-07-09
  • 打赏
  • 举报
回复
涨见识了,终于知道什么叫裸跑了,谢谢各位!

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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