jinhualee
驱动牛犊
驱动牛犊
  • 注册日期2004-09-01
  • 最后登录2007-03-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2005-01-20 10:09
(1)你的中断是2号,#define SYSINTR_EXT2 (SYSINTR_FIRMWARE+4)这么定义会不会有问题啊?我觉得应该定义成
#define SYSINTR_EXT2 (SYSINTR_FIRMWARE+2)
===============================================
不解。


我的理解是在定义逻辑中断时,它是和硬件中断号是没有什么联系的;只需要将逻辑中断和相应的硬件中断挂起来就行。
不知道我的理解有没有不对的地方,请指正
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
21楼#
发布于:2005-01-20 10:24
你说的是有道理:))
但我的理解是:
理论上讲,逻辑中断是可以“任意定义”。但你可以看看oal里的定义,(SYSINTR_FIRMWARE+4)已经分配给其他中断了,也就是说可能有其他的ist(就叫它ist1吧)与这个逻辑中断相关联。试想想,当你返回这个逻辑中断的时候,那个ist1也应该被激活,这样就乱了。我是这么觉得的。如果不对,还请各位高手指教!
Come on, let us drive the world.
jinhualee
驱动牛犊
驱动牛犊
  • 注册日期2004-09-01
  • 最后登录2007-03-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
22楼#
发布于:2005-01-20 10:35
老大,你的说法我理解,也确实是这样的
但是我定义前是
#define SYSINTR_PCMCIA_LEVEL    (SYSINTR_FIRMWARE+4)
而我的系统里是不支持PCMCIA的

PB帮助的“Creating an Interrupt Identifier”也看了的
郁闷中
jinhualee
驱动牛犊
驱动牛犊
  • 注册日期2004-09-01
  • 最后登录2007-03-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
23楼#
发布于:2005-01-20 10:44
我的原来的OALINTR.H的定义是这样的
// These are the 'standard' interrupts
#define SYSINTR_KEYBOARD        (SYSINTR_FIRMWARE+0)
....
#define SYSINTR_DMA9            (SYSINTR_FIRMWARE+24)
#define SYSINTR_TOUCH_CHANGED   (SYSINTR_FIRMWARE+25)

如果真是那样的话,难道我不能再定义我的新中断了吗?
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
24楼#
发布于:2005-01-20 10:44
(1)如果是这样的话,应该也可以。
(2)现在能捕捉到中断吗?
Come on, let us drive the world.
jinhualee
驱动牛犊
驱动牛犊
  • 注册日期2004-09-01
  • 最后登录2007-03-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
25楼#
发布于:2005-01-20 11:34
一调用 WaitForSingleObject 程序就自己跑出来了  :(
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
26楼#
发布于:2005-01-20 11:42
一调用 WaitForSingleObject 程序就自己跑出来了  :(


你是说中断产生后,WaitForSingleObject被释放,然后就从ist里面出来了吗? WaitForSingleObject函数应该在while“死循环”里面啊
Come on, let us drive the world.
jinhualee
驱动牛犊
驱动牛犊
  • 注册日期2004-09-01
  • 最后登录2007-03-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
27楼#
发布于:2005-01-20 11:57
还没产生中断呢
在IST里一调用WaitForSingleObject,程序就跳出IST了,应该是调用WaitForSingleObject不成功。

[编辑 -  1/20/05 by  jinhualee]
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
28楼#
发布于:2005-01-20 12:15
还没产生中断呢
在IST里一调用WaitForSingleObject,程序就跳出IST了,应该是调用WaitForSingleObject不成功
我的代码如下:
DWORD  WINAPI  KeyIST( LPVOID lpvParam )
{
  BOOL   fRun  = TRUE;    
  while( fRun )
  {
    printf("tWaitForSingleObject begin...n");
    dwStatus  = WaitForSingleObject( hevInterrupt, INFINITE );  
    printf("tWaitForSingleObject successful!n");

    // Make sure we have the object
    //
    if( dwStatus == WAIT_OBJECT_0 ){...}
  }

====================================
显示了“tWaitForSingleObject begin...”以后就没有“tWaitForSingleObject successful!”显示出来,KeyIST停止执行,并跳出KeyIST了。


(1)“tWaitForSingleObject successful!”没有显示出来,应该是因为wait函数阻塞在那里了吧。
(2)你怎么知道KeyIST停止执行,并跳出KeyIST了?你可以在while循环的后面加一个打印输出,看看是不是从while循环里跳出来了。
(3)hevInterrupt是全局变量是吗?
Come on, let us drive the world.
jinhualee
驱动牛犊
驱动牛犊
  • 注册日期2004-09-01
  • 最后登录2007-03-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
29楼#
发布于:2005-01-20 12:30
1)不明白你说的意思,请详细给我讲讲,谢谢。
2)下面是代码:
3)是全局变量。



[编辑 -  1/21/05 by  jinhualee]
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
30楼#
发布于:2005-01-20 12:44
1)不明白你说的意思,请详细给我讲讲,谢谢。
2)下面是代码:
3)是全局变量。

DWORD  WINAPI  KeyIST( LPVOID lpvParam )
{
  printf("tThe KeyIST Thread entry.n");
  while( fRun )
  {
    printf("tWaitForSingleObject begin...n");
    dwStatus  = WaitForSingleObject( hevInterrupt, INFINITE );  
printf("tWaitForSingleObject succesful!n");

    // Make sure we have the object
    //
    if( dwStatus == WAIT_OBJECT_0 )
    {

      printf("tInterrupt...");  

      // Finish the interrupt
      //
      InterruptDone( SYSINTR_EXT2 );  

    }
printf("tWaitForSingleObjec being.n");
  }
  printf("tThe KeyIST Thread finish.n");
  return 0;
}
 


(1)当你返回逻辑中断时,wai函数被释放,否则会一直阻塞在那里。 对了,在wai之前,判断一下hevInterrupt是否有效?
(2)如果从ist里面出来了,下面这句应该执行,
printf("tThe KeyIST Thread finish.n");
你看到输出“The KeyIST Thread finish.”了吗?
(3)你的ist是在你自己写的程序里实现的是吧?
Come on, let us drive the world.
jinhualee
驱动牛犊
驱动牛犊
  • 注册日期2004-09-01
  • 最后登录2007-03-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
31楼#
发布于:2005-01-20 14:13
ist是对了
但是捕捉不到中断信号

我看看不是不使能寄存器没设置好

郁闷中哦
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
32楼#
发布于:2005-01-20 14:20
ist是对了
但是捕捉不到中断信号

我看看不是不使能寄存器没设置好

郁闷中哦


你确定有中断产生吗?
Come on, let us drive the world.
jinhualee
驱动牛犊
驱动牛犊
  • 注册日期2004-09-01
  • 最后登录2007-03-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
33楼#
发布于:2005-01-20 15:57
这样才能确定中断产生呢?郁闷.....
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
34楼#
发布于:2005-01-20 16:17
(1)可以用示波器查看;
(2)不知道你的oeminterrupthandler里面是怎么处理这个中断的?你直接返回逻辑中断试试?如果有中断产生的话,ist至少能被激活一次。方便的话,把oeminterrupthandler中的代码贴出来,让大家帮分析一下。
Come on, let us drive the world.
jinhualee
驱动牛犊
驱动牛犊
  • 注册日期2004-09-01
  • 最后登录2007-03-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
35楼#
发布于:2005-01-20 16:32
告诉我你的邮件  我发给你吧  

[编辑 -  1/21/05 by  jinhualee]
jinhualee
驱动牛犊
驱动牛犊
  • 注册日期2004-09-01
  • 最后登录2007-03-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
36楼#
发布于:2005-01-20 16:38
1)  我的是按键,中断脉冲当然是有的了。不知道你说用示波器看是什么意思?
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
37楼#
发布于:2005-01-21 08:27
1)  我的是按键,中断脉冲当然是有的了。不知道你说用示波器看是什么意思?

我的意思是:
你先用示波器看看按键后对应的中断线上是否有中断产生?如果中断有了,就好办了。

另外,我在msn中加你了。
Come on, let us drive the world.
上一页 下一页
游客

返回顶部