sssong
驱动牛犊
驱动牛犊
  • 注册日期2002-04-03
  • 最后登录2007-08-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1973回复:5

I/O读写的问题

楼主#
更多 发布于:2002-06-01 22:33
我在一个使用查询方法的数据采集程序中,采用循环来读数据,查询到上升或下降眼然后读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      
上面波形中出现两种典型情况。
惊涛拍案,舍我其谁!
sssong
驱动牛犊
驱动牛犊
  • 注册日期2002-04-03
  • 最后登录2007-08-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-06-01 22:38
clk  --_______________----------------_________________-----
查询 ||||___________||||________________|||||___|||||||||
读数 ____||||||||||______|||_____|||||||_____ ^^__________||
____________right___________^ ^ ^error
      
上面波形中出现两种典型error情况。
惊涛拍案,舍我其谁!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2002-06-03 14:08
你是在app读数的吗?
可能是被其他的线程抢先了?
zealin2
驱动牛犊
驱动牛犊
  • 注册日期2002-06-18
  • 最后登录2003-08-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-06-27 13:17
载循环中,cpu应该不会响应其他线程才对,
azure
驱动牛犊
驱动牛犊
  • 注册日期2001-03-29
  • 最后登录2007-03-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-06-27 21:32
Win95以后,系统分给每个进程的时间片是几十ms,如果某个进程在时间片结束时仍未释放CPU,则系统强制剥夺CPU,将该进程挂起,并将该进程排在进程队列的末尾。然后在其他排队进程都结束时间片后,系统再次激活这个进程。

你的for循环中断应该就是由于时间片耗尽,系统将进程挂起引起的。
wuqix
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2008-06-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-06-28 04:01
在应用层轮询,如果实时性要求比较高,肯定是实现不了,你没说速度要求是什么,我也就没法判断你这样做的影响有多严重。建议你做个简单的实验:除了你的程序外,多开几个别的进程,比如word、ie之类的,看看错误出现是不是随机的,如果是,那么差不多应该是多线程的问题,如果你的错误程度没变,那你应该检查硬件设计或者读状态的那段程序。不过如果想实现基本不丢数据而且采样速率比较高的话,驱动还是免不了的。
游客

返回顶部