degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:3299回复:41

关于中断问题的请教

楼主#
更多 发布于:2004-11-28 10:36
各位老大,我现在的驱动正在调试中断,现在有一个很奇怪的现象,我将中断号和giisr函数连接,同时把自己的ist等待giisr的事件,我在giisr 中ISRHandler函数设定断点。在我第一次产生中断后,系统在断点中停止了,但是后来调试再没有在断点上停止,每次一有中断,不是系统重启就是出现堆栈溢出的错误,不知道为什么??
degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-11-29 08:55
现在有一个新问题,我把giisr的port换一下,又可以进一次中断服务程序,但是从isr中返回的时候,出现了一次nk.bin的异常后又进不去isr了,我想问各位老大,isr中怎么会引起中断的异常呢
joyfly
驱动小牛
驱动小牛
  • 注册日期2002-07-02
  • 最后登录2009-09-17
  • 粉丝0
  • 关注0
  • 积分319分
  • 威望32点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-11-29 13:14
建议你不要在ISR里设断点,这样会严重影响系统的运行.
你可以在ISR用RETAILMSG打出消息来调试.

另外,你一定要用Installable ISR的方式来处理你的中断吗?
象一般的DRIVER那样,你自己定义一个SYSINTR_XXX的逻辑中断号,来返回给你的IST处理不行吗?
www.cnemb.com
degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-11-29 21:16
我看了一下,应该不在isr中加断点,在ist中加断点就可以停住。现在还有一个更奇怪的现象,我做的是串口的驱动,如果我不设置波特率等东西,接受到数据后就有中断信号并且可以进我的ist的程序,但是我设置了波特率以后,接受数据后中断信号还有,但是就是进不去我的ist的程序了,不知道为什么,请各位老大说说
degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-11-30 09:03
还有,我是在isr中没有做什么操作,我的主要的中断处理都是在ist中做的
chang_nicolas
驱动小牛
驱动小牛
  • 注册日期2004-08-26
  • 最后登录2007-03-29
  • 粉丝0
  • 关注0
  • 积分370分
  • 威望39点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-11-30 09:50
这个跟你设置波特率没有必然的联系吧,能产生中断的话能够进入IST的,那是不是你设置的波特率不符合DCB中BaudRate的那些值导致找不到合适的Divisor而return false了啊?
degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-11-30 10:46
各位老大,因为我要接在pci上,所以没有用标准的com的函数,是我自己实现的流设备,那个波特率的觉得没有问题,我有示波器看了,是对的,现在更奇怪的现象是在giisr中设置了打印信息,现在ist的断点都停住了,但是打印信息却没有出来
degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-12-01 09:16
现在是这样,如果我的波特率设置在9600以上,就正常,但是低于9600就不能进我的ist,请各位老大说说
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-12-01 14:10
哟,刚给你回信没看到这个喃:)

是不是中断优先级太底了缓冲区溢出,你试着把ist优先级提高些再试试
根据地的兄弟们,团结就是力量
degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-12-01 15:54
老大,应该不是这样,我才发了一个字符,并且最一开始我的ist函数的优先级是3,够高了,我觉得??现在是波特率变慢就进不了中断程序,我想问各位老大,我在isr中可以调用什么样的打印函数才可以,我用DEBUGMSG,但是打不出东西,我估计是wince不让在isr中打印信息
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-12-02 13:37
哇,没看清楚,哈哈,是低于9600就不行了啊


你的中断函数是isr还是ist??

在任何地方都可以用DEBUGMSG打印,格式是
DEBUGMSG(1,TEXT(“XXX”));

可以用的函数都是些宏,最终用的是OEMWriteDebugString

你先在中断服务(isr)代码里面打印东西,看执行没有,如果有再看中断服务线程(ist)
根据地的兄弟们,团结就是力量
degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-12-02 17:46
老大,现在是这样的,我在isr中设置debugmsg,格式和你说的一样,但是没有东西打出来,可是就是正常进了我的ist也在isr中没有信息输出,不知道为什么,而且,还有一个奇怪的现象就是在低于9600的情况下,我用单步执行的方式发送数据,就可以进我的ist,但是从ist中退出来时候有时候会出现堆栈溢出的现象,不知道为什么
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-12-03 13:15
你单步方式调试中断方式工作的串口当然会缓冲区溢出了

可以进入ist,但isr输出不了东西???一进入isr就打印一个东西就不行?那你把isr写成死循环看看能不能停在里面

对了,你用片子是什么?我忘了,是x86?
根据地的兄弟们,团结就是力量
degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-12-06 07:59
老大,现在有这样一个奇怪的现象,我是把一个串口在外部用自环连起来收发,如果在发函数和收函数之间没有别的程序,硬件中断产生后,就进不到ist中,但是如果我在发函数和收函数之间加一个空的for循环,就可以进到我的ist中,不知道是怎么回事,请老大有时间的时候看看
chang_nicolas
驱动小牛
驱动小牛
  • 注册日期2004-08-26
  • 最后登录2007-03-29
  • 粉丝0
  • 关注0
  • 积分370分
  • 威望39点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-12-06 09:23
在ISR中看打印信息的话,不能用DebugMSG,一般用NKDbgPrintfW!
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-12-06 13:05
“但是如果我在发函数和收函数之间加一个空的for循环”

你用中断方式怎么还有这种操作顺序?接收过程怎么你手动在做?收应该在isr里面吧

chang_nicolas:兄弟,DebugMSG可以用的
根据地的兄弟们,团结就是力量
degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-12-08 12:33
老大,是这样的,我的isr用的是wince带的giisr。我在里面什么都没有做,处理我的真正的中断在ist中做的,在ist中负责我的数据从串口读出放在内存缓冲区里,我的驱动读函数是从缓冲区把数据读出来,不做具体的硬件操作。我现在测试是在一个应用程序中creatfile串口,然后writefile这个串口,因为是外部自环,所以我在程序中调用readfile函数将数据收回,如果我在write函数和read函数之间加一个空的for循环,write后就可以进我的ist,如果不加,就不进,我感觉for循环是一个delay,可以让我的ist被调用。
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-12-08 13:39
恩,这个过程同步有问题,你想想,写动作完后马上读你怎么保证数据已经被正确收到?在打开串口的时候你给定的访问方式是什么?FILE_SHARE_READ|FILE_SHARE_WRITE?这样两个调用都会成功,你那个接收缓冲区的数据肯定不对.

还有,进不了Ist你看看你发的数据有多少?你设的接收中断是什么啊?大概应该是诸如接收缓冲区半满中断之类的吧?数据不够不会产生中断的喔。

根据地的兄弟们,团结就是力量
degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-12-08 17:19
老大,我是自己实现的串口驱动,不是用的微软带的,所以我的缓冲是由我设置的,还有是我在debug的时候发现发几个数后,产生的中断是收的中断,我处理是在ist 中做的
chang_nicolas
驱动小牛
驱动小牛
  • 注册日期2004-08-26
  • 最后登录2007-03-29
  • 粉丝0
  • 关注0
  • 积分370分
  • 威望39点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-12-09 09:56
你在测试时先向串口writefile再Readfile,然后发现数据不同步是吧,那你的writefile和readfile的lpOverlapped这项要设置为NULL吧。
上一页
游客

返回顶部