rainasun
驱动牛犊
驱动牛犊
  • 注册日期2004-08-09
  • 最后登录2004-12-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:982回复:3

救命:为什么中断服务函数不能优先执行???

楼主#
更多 发布于:2004-08-12 16:20
这个问题困扰我已经很久了,我使用DriverStudio自己编写研华采集卡PCL818L的驱动,目的是想能够捕获采集过程的中断,并且在中断处理函数中进行:A/D读取数据-控制运算-D/A控制信号输出,通过设置采集卡的8254获得了1K的采样速率,每采一个值后采集卡会发送中断信号。我这里用的是3号中断。
问题是:程序运行后,如果不刷屏,也不移动鼠标,控制结果没有问题,但是稍稍移动鼠标或者窗口的话就控制不了了,完全计算错误,输出为0。我如果将下面的语句中//ts.Counter=(ULONG)m_PID.Kp;注释去掉的话,就能控制住了,但是用户级的程序还是对控制有部分影响,按常规理解,//ts.Counter=(ULONG)m_PID.Kp;这一句是可有可无的,因为它后面还有ts.Counter=m_InterruptCount;。我是新手,不明白其中的原因,猜测可能是鼠标中断或其他中断对我响应的3号中断处理函数的执行有影响,我的中断处理不能实时进行。哪位大侠能告知怎么解决,谢了先,大量散分!

下面贴出中断处理代码:

BOOLEAN InterruptDemoDevice::Isr(void)
{
T << "In the ISR\n";

//读取板卡中断状态
UCHAR ADStatus=m_IoRange.inb(8);
UCHAR tmp=ADStatus&(0x10);
if(tmp!=0x10)
{
return FALSE;
}


T << "Begin Control\n";
__try
{
VIEWIO ts;
double u,y;
//ts.Counter=(ULONG)m_PID.Kp;
++m_InterruptCount;
ts.Counter=m_InterruptCount;
int ADdata=m_IoRange.inw(0);
ADdata=ADdata>>4;
y=20/4096.0*(ADdata-2048);
double rin=6;
T << "rin="<<(ULONG)rin<<",ADdata="<<(ULONG)ADdata<<"\n";
u=m_PID.PID_Normal_Control(rin,y);
ts.OutData=y;
ts.InData=rin;
T << "u="<<(ULONG)u<<",y="<<(ULONG)ts.OutData<<"\n";
if(u>=4095)u=4095;
if(u<=0)u=0;
USHORT DAdata,lDAdata,hDAdata;
DAdata=(USHORT)u;
DAdata=DAdata<<4;
lDAdata=DAdata&255;
hDAdata=DAdata>>8;
hDAdata=hDAdata&255;
m_IoRange.outb(4,(UCHAR)lDAdata);
m_IoRange.outb(5,(UCHAR)hDAdata);
m_VIEWIOFifo.Lock();
m_VIEWIOFifo.Write(&ts, 1);
m_VIEWIOFifo.Unlock();
m_IoRange.outb(8,0);
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
T << "Control Error\n";

}
T << "End Control\n";
return TRUE;
}
http://www.rainasun.com 雨后骄阳饰品网
hzhq1
驱动老牛
驱动老牛
  • 注册日期2002-12-13
  • 最后登录2012-03-29
  • 粉丝0
  • 关注0
  • 积分32分
  • 威望1054点
  • 贡献值0点
  • 好评度606点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-08-12 16:33
没做过,
不过可以问问DS的技术支持工程师啊。
这是一个,一个风雨交加的,漆黑的夜晚......恩,情节越来越复杂了。
wzxghost
驱动牛犊
驱动牛犊
  • 注册日期2002-03-08
  • 最后登录2010-11-10
  • 粉丝0
  • 关注0
  • 积分67分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-08-12 16:35
提高优先级试试! :D
wzxghost
驱动牛犊
驱动牛犊
  • 注册日期2002-03-08
  • 最后登录2010-11-10
  • 粉丝0
  • 关注0
  • 积分67分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-08-12 16:39
做过和你一样的东东,也是818,但不是用ds,用的windriver,没有出现你说的这种情况!
游客

返回顶部