阅读:1715回复:5
如何实时响应中断?
一块PCI图像采集卡,要求中断响应时间小于1ms,在WINCE下实测时,多数都能控制在20us,但偶尔会大于10ms,导致FIFO数据丢失,中断服务程序已设置成最高优先级仍然不行,还有别的办法吗?
|
|
最新喜欢:clevor |
论坛版主
|
沙发#
发布于:2004-12-28 13:36
你说的中断服务程序是IST吗?
CE允许中断嵌套,而且用的是多队列轮转调度,如果你的IST是最高优先级肯定可以满足实时性,关键一点是你的系统中其他设备不能长时间关中断,所有ISR都做得尽量小,清除中断后马上开放中断 |
|
板凳#
发布于:2004-12-28 18:22
多谢指教!我是在IST里设的最高优先级SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);而且我的程序里也没有关闭中断的地方。我试了DEBUG和RELEASE版,效果差不多。是不是不能采用EBOOT方式从上位机启动,而要直接在本地运行程序才能实时呀?(我都是从PB里启动目标机的程序的)。或者编译器里有什么选项要关闭,比如关闭kernel debuger等?
|
|
论坛版主
|
地板#
发布于:2004-12-29 14:15
嗯,这个倒是有可能,KERNEL DEBUGGER可能会对这个有影响。对了,你自己写的代码没问题还不行,你要确保系统内所有设备的操作都不会长时间关中断才行,光有CE保证实时的机制还不够,整个系统的代码都必须考虑好才行。主要就是看看每个ISR,不要操作需要太长时间的外设的状态寄存器。另外有没有中断处理链过长的问题,比如你把设备的ISR挂到共享中断请求上。
|
|
地下室#
发布于:2004-12-29 16:58
问题搞定了,去掉程序里的DEBUG信息输出就行了,因为它使用COM1输出,占用了大量中断时间。
|
|
论坛版主
|
5楼#
发布于:2004-12-30 13:44
:)))A YAYA,不会吧..
你不是说RELEASE版的也一样啊?DEBUGMSG在RELEASE的时候没有的喔,再说这个宏虽然用查询方式工作,但是可以被中断的啊,而且你的IST是实时优先级的喔。 |
|