阅读:1973回复:5
I/O读写的问题
我在一个使用查询方法的数据采集程序中,采用循环来读数据,查询到上升或下降眼然后读10个数(在每个高低脉冲都要读10个数),会出现下面的错误(逻辑分析仪采的数据),就是在采集中偶尔会出现下面这种情况,for循环中断一下,停止一段时间,但总的个数是对的,从而漏掉一个周期的数据,这是什么原因造成的呢?计算机?多线程?查询?请教高手指点。
vc中开辟新的线程来运行下面的程序 while() { //查询 for(;;) { c0=_inp(0x31e); //判断沿 } //read data from 0x31c for(i=0;i<128;i++) buffer=_inpw(0x31c); //是否结束 } clk --_______________----------------_________________----- 查询 |||| |||| ||||| ||||||||| 读数 |||||||||| ||| ||||||| ^^ || right ^ ^ ^error 上面波形中出现两种典型情况。 |
|
|
沙发#
发布于:2002-06-01 22:38
clk --_______________----------------_________________-----
查询 ||||___________||||________________|||||___||||||||| 读数 ____||||||||||______|||_____|||||||_____ ^^__________|| ____________right___________^ ^ ^error 上面波形中出现两种典型error情况。 |
|
|
板凳#
发布于:2002-06-03 14:08
你是在app读数的吗?
可能是被其他的线程抢先了? |
|
地板#
发布于:2002-06-27 13:17
载循环中,cpu应该不会响应其他线程才对,
|
|
地下室#
发布于:2002-06-27 21:32
Win95以后,系统分给每个进程的时间片是几十ms,如果某个进程在时间片结束时仍未释放CPU,则系统强制剥夺CPU,将该进程挂起,并将该进程排在进程队列的末尾。然后在其他排队进程都结束时间片后,系统再次激活这个进程。
你的for循环中断应该就是由于时间片耗尽,系统将进程挂起引起的。 |
|
5楼#
发布于:2002-06-28 04:01
在应用层轮询,如果实时性要求比较高,肯定是实现不了,你没说速度要求是什么,我也就没法判断你这样做的影响有多严重。建议你做个简单的实验:除了你的程序外,多开几个别的进程,比如word、ie之类的,看看错误出现是不是随机的,如果是,那么差不多应该是多线程的问题,如果你的错误程度没变,那你应该检查硬件设计或者读状态的那段程序。不过如果想实现基本不丢数据而且采样速率比较高的话,驱动还是免不了的。
|
|