20楼#
发布于:2004-12-09 10:03
这个问题很有意思哦,解决后告诉小弟一下问题原因
|
|
21楼#
发布于:2004-12-09 10:56
我也说两句吧。我觉得你的串口接受中断设置可能有问题,比如缓冲区的设置。 :P
|
|
|
论坛版主
|
22楼#
发布于:2004-12-09 15:42
我这么说吧,你先看看你的串口中断工作方式中一共有哪些中断,比如发送缓冲区空,接受缓冲区半满等,然后先使能其中一个,比如接受缓冲区半满中断。然后你用writefile发送n+1个数据,其中n是接收缓冲区半满中断门限。然后看看ist能否正常进入(前提是外部用的自反馈连接)。注意,我说得这个缓冲区指的是uart模块硬件自己带的,不是你分配的那个
另外一个大问题是,你自己开辟一个缓冲区来存放数据,读写的时候需要自己和上层同步,也就是说上层调用readfile时下层要返回正确的东西,这样的同步动作有两种办法: 1.应用和驱动同过同一个同步对象(事件,信号量等)来异步工作,当驱动正确收到数据后置事件有效,上层应用在调用readfile前需要wait,当事件有效后才读,readfile负责返回实际读取数据的长度。 2.在驱动内部wait,也就是上层可以随时调用readfile,但进入后如果有数据,会返回,没有数据就会忙等,直到有数据回来。 以上做法第一种不浪费cpu时间,但应用需要和驱动共享数据,移植性变差;第二种方式应用和驱动独立性强,但cpu会忙等。 你可以权衡一下选一种,当然兄弟也可以用更好的蛤,我只是举了个例子:) |
|
23楼#
发布于:2004-12-10 09:08
老大,是这样的,我的接收中断的触发级设定的是10个char触发,但是没有到10个char就有中断了,我看了一下中断源是接收时间溢出中断。也就是说当接收的fifo有数后一定时间没有收就有这个中断,我现在感觉就是当中断产生后,进了isr返回后,我的ist不能被激活或者不能获得运行权,但是我的ist的优先级已经设定为3了
|
|
24楼#
发布于:2004-12-10 10:11
每次中断都是溢出中断吗?我感觉可能是你对你的串口芯片初始化设置有问题。仔细检查一下吧 :cool:
溢出中断发生后,进入isr了吗?此时从isr返回的是你的逻辑中断号吗? |
|
|
25楼#
发布于:2004-12-10 11:17
我看了一下,关键是这个溢出中断没有地方可以屏蔽呀
|
|
26楼#
发布于:2004-12-10 11:19
最奇怪的是我在isr中打印信息没有出来,但是ist还可以进入
|
|
论坛版主
|
27楼#
发布于:2004-12-10 14:16
......还没搞定啊:(
你的超时中断的isr执行后返回的sysintr是什么啊,能不能出发触发ist执行喃,把你的超时中断的isr也返回你指定给接受中断的那个sysintr,最终读出的长度从uart寄存器里面判断 |
|
28楼#
发布于:2004-12-13 08:32
兄弟,问题解决了吗?到底是什么问题啊?
|
|
|
29楼#
发布于:2004-12-13 10:20
各位老大,我的那个超时中断也是串口中断之一,我的硬件是这样的,9054带一个16c954,在cpld里面做一个中断的控制寄存器器,所以对于我的系统来说,只有一个中断9产生中断,在中断产生后,调用isr,但是没有做什么就返回,然后我在我的ist中查是那个设备产生的中断,是什么中断,然后处理,就出现了上面的情况
|
|
30楼#
发布于:2004-12-13 13:11
也就是说你的串口中断采用的中断是9号中断是吗?
|
|
|
论坛版主
|
31楼#
发布于:2004-12-13 15:54
“但是没有做什么就返回”
返回东西不一样的喔:)))这里返回的东西关系到是哪个事件被置为有效,之前,需要用InterruptInitialize把返回的东西和被触发的事件关联起来 |
|
32楼#
发布于:2004-12-13 16:20
对啊,你的ISR最后应该返回与你的IST等待的Event相关联的Sysintr。
|
|
|
33楼#
发布于:2004-12-14 10:12
那各位老大isr的东西应该怎么调试呢,我在isr的函数里面加了debugmsg,但是没有输出呀,不知道是怎么回事
|
|
34楼#
发布于:2004-12-14 10:39
关于isr的调试,论坛里面有一些这样的帖子,你查一下。
|
|
|
35楼#
发布于:2004-12-14 11:51
我搜索了论坛的帖子没有呀???
|
|
论坛版主
|
36楼#
发布于:2004-12-14 13:28
唉,今天写信给人民日报的时候应该把我的名字也写进去的:))))
你的串口用对没有啊,你在调串口驱动,debug信息用另外一个串口喔。isr里面肯定可以输出调试信息的!相信e,莫错的 |
|
37楼#
发布于:2004-12-14 13:33
老大,我不是用的串口输出的调试信息,是用的网口
|
|
论坛版主
|
38楼#
发布于:2004-12-14 13:39
用lpWriteDebugStringFunc(TEXT("XXXXXXXXX"));
|
|
39楼#
发布于:2004-12-14 13:45
wxl_50685330 大哥,人民日报的文章什么时候发表啊?
:P :P :P |
|
|