liumengtao
驱动牛犊
驱动牛犊
  • 注册日期2003-03-02
  • 最后登录2006-08-08
  • 粉丝0
  • 关注0
  • 积分64分
  • 威望8点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:1715回复:5

如何实时响应中断?

楼主#
更多 发布于:2004-12-27 23:56
一块PCI图像采集卡,要求中断响应时间小于1ms,在WINCE下实测时,多数都能控制在20us,但偶尔会大于10ms,导致FIFO数据丢失,中断服务程序已设置成最高优先级仍然不行,还有别的办法吗?

最新喜欢:

clevorclevor
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-12-28 13:36
你说的中断服务程序是IST吗?

CE允许中断嵌套,而且用的是多队列轮转调度,如果你的IST是最高优先级肯定可以满足实时性,关键一点是你的系统中其他设备不能长时间关中断,所有ISR都做得尽量小,清除中断后马上开放中断
根据地的兄弟们,团结就是力量
liumengtao
驱动牛犊
驱动牛犊
  • 注册日期2003-03-02
  • 最后登录2006-08-08
  • 粉丝0
  • 关注0
  • 积分64分
  • 威望8点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-12-28 18:22
多谢指教!我是在IST里设的最高优先级SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);而且我的程序里也没有关闭中断的地方。我试了DEBUG和RELEASE版,效果差不多。是不是不能采用EBOOT方式从上位机启动,而要直接在本地运行程序才能实时呀?(我都是从PB里启动目标机的程序的)。或者编译器里有什么选项要关闭,比如关闭kernel debuger等?
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-12-29 14:15
嗯,这个倒是有可能,KERNEL DEBUGGER可能会对这个有影响。对了,你自己写的代码没问题还不行,你要确保系统内所有设备的操作都不会长时间关中断才行,光有CE保证实时的机制还不够,整个系统的代码都必须考虑好才行。主要就是看看每个ISR,不要操作需要太长时间的外设的状态寄存器。另外有没有中断处理链过长的问题,比如你把设备的ISR挂到共享中断请求上。
根据地的兄弟们,团结就是力量
liumengtao
驱动牛犊
驱动牛犊
  • 注册日期2003-03-02
  • 最后登录2006-08-08
  • 粉丝0
  • 关注0
  • 积分64分
  • 威望8点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-12-29 16:58
问题搞定了,去掉程序里的DEBUG信息输出就行了,因为它使用COM1输出,占用了大量中断时间。
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-12-30 13:44
:)))A YAYA,不会吧..

你不是说RELEASE版的也一样啊?DEBUGMSG在RELEASE的时候没有的喔,再说这个宏虽然用查询方式工作,但是可以被中断的啊,而且你的IST是实时优先级的喔。

根据地的兄弟们,团结就是力量
游客

返回顶部