3535|5

63

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

linux下中断处理问题 [复制链接]

  现有一外部中断,中断来临后要求驱动马上读取数据,现在问题是:中断来临后,怎么通知用户主动读取数据,现在我用的是使用了中断上下部,下部处理中断,一产生中断马上进入上半部分处理接收,并传送到用户空间,那么此时的读如果在没有中断时就一直阻塞在内核的中断上部分了?但是因为实时性要求,能够在处理读时,写也能够同时进行(读到一个数据或发送完一个数据内部都会产生一个中断,需要从中断读取),请问有什么方法能让内核产生的外部中断不组塞,在来临中断后,马上送网用户取进行发送读取命令呢?

最新回复

利用异步通知机制就可以 了!  详情 回复 发表于 2008-6-3 14:54
点赞 关注

回复
举报

64

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
需求不明。
“中断来临后要求驱动马上读取数据,现在问题是:中断来临后,怎么通知用户主动读取数据”
驱动读数据,为什么又要通知用户主动读数据?

中断来了后要求驱动马上读数据,这个容易理解,防止数据丢失。那驱动里面肯定有相应的中断处理线程,将数据读到指定的空间就行了。应用程序什么时候来读,你的驱动是管不了的,只能设置一些状态位,最多在一个共享内存里,设置一个标志位,表示有数据。但是应用层什么时候来取,驱动层无法控制。

实时性要求到底多高?涉及到操作系统,就必然要考虑到OS对中断的处理延时,基本上ARM的Linux/WINCE可以认为在10mS级,VxWorks可以做到1mS级,ucOSII也可以做到1mS甚至更快一点。

同时读同时写是不可能的,除非你是双核。另外OS的任务切换必然会导致任务的不可靠延时,即使你设了任务为最高优先级。

你到底什么接口?什么样的数据量,要求到底是多少?既然都要求操作系统了,难道客户就不知道操作系统的实时性不好吗?
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
谢谢shuiyan的回答:
   通讯的是SPI接口,数据量不大,主要是实时性要求比较强.
   ARM为主,单片机为从.单片机通过中断来向ARM发送数据.
   现在已经实现了只读或只写(没有同步执行),基本没有错误,但领导要求必需读写同步都要能行!我在用户空间开了两个线程,写线程在需要的情况下执行,而读取的数据要求中断来临后马上要将数据从内核空间拷贝到用户空间,所以我在没有数据来的时候读函数就一直阻塞在内核中断的顶部(中断为底部,数据处理留到顶部,之间采用了工作队列及completion通知机制,),当外部中断来了后,进入驱动的外部中断处理函数,置一标志位,在SPI中断函数里根据此标志位置位否来决定是否为接收到的数据,若是,complete告知顶部,返回用户空间.如此一来即避免了在用户空间轮训查询来读取数据的问题,但是在此种情况下,如果写线程同步执行,则出现了资源的严重竞争(读写函数中有些变量是公用的,在处理上已经枷锁了),且由于写阻塞在 内核中断上文,用户空间程序无法通过ctrl+c来退出程序.
   用外部中断来唤醒用户空间的"读",只能阻塞在内核空间了吗?
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 
的确还是看不懂
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

5
 
呵呵,可能语言表达能力有限吧,现在基本解决了
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

6
 
利用异步通知机制就可以 了!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表