whenme
驱动牛犊
驱动牛犊
  • 注册日期2002-05-12
  • 最后登录2004-05-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1401回复:4

实时写硬盘的问题

楼主#
更多 发布于:2002-05-18 02:40
我做一个pci数据采集卡,每1ms有来自AD的8kByte数据,周期性的。把8kByte数据缓存起来,通过pci总线集中传向计算机内存区,
这需要30us时间。那么剩下970us用来把接受到的计算机内存中的8kByte数据写入硬盘,则硬盘速度须大于8MByte/s,而我的硬盘有20MByte/s的速度,为什么现在总会丢数?一丢就是一个周期。
1。驱动 WinDriver 5。03
2。中断方式,中断服务中存盘,中断没有丢。
3。如果不存盘,那么就不会丢数。
4。如果缓存改为64MByte,就不会丢数
我想原因会不会是windows下磁盘写不是顺序写,如果是这样的话,磁盘的速度就很低了。另一个方面
请高手出招。
my Email: whenme2000@163.com
如果答的好,我舍得给分。


 
mrsmell
驱动牛犊
驱动牛犊
  • 注册日期2002-10-05
  • 最后登录2002-10-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-10-05 14:36
首先,你要明白硬盘持续数据率是多少,告诉你一个事实,大多数硬盘虽然宣称采用UDMA接口100MB,内部数据率>35MB/s,但长期持续数据率远远达不到你所说的8MB/s,其次,在Windows 下硬盘的读写比较复杂,因此影响到速率,此外,还有硬盘本身的原因,比如寻道延时等。对你的应用来说,硬盘是非实时器件,解决的办法是必须要用大的数据缓冲区,比如你所说的加64MB缓存。
mrsmell
驱动牛犊
驱动牛犊
  • 注册日期2002-10-05
  • 最后登录2002-10-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-10-05 14:44
另外,你可以试试多线程技术,在中断程序中仅设置读写标志,然后写一个独立的线程专门监测读写标志和写硬盘数据。可能会解决,但不能保证记录每周期的数据,因为Windows是非实时的!稳妥的方法是中间加一个数据缓存(如大数组)。
grant
驱动老牛
驱动老牛
  • 注册日期2001-05-14
  • 最后登录2007-04-13
  • 粉丝0
  • 关注0
  • 积分350分
  • 威望35点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-05 10:43
8MB/s流盘,很难做到。
我试下来,可以稳定在5MB/s左右。
现在我的项目用40MB/s(采样直接流盘),我是用ADAPTEC 29160 SCSI卡配15000 ST硬盘做到的。
助人乃快乐之本 有人给分就更快乐了 :-)
grant
驱动老牛
驱动老牛
  • 注册日期2001-05-14
  • 最后登录2007-04-13
  • 粉丝0
  • 关注0
  • 积分350分
  • 威望35点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-05 10:44
8MB/s流盘,很难做到。因为File System的问题。
我试下来,可以稳定在5MB/s左右。
现在我的项目用40MB/s(采样直接流盘),我是用ADAPTEC 29160 SCSI卡配15000 ST硬盘做到的。而且不能用File System,后来用ASPI搞定。
助人乃快乐之本 有人给分就更快乐了 :-)
游客

返回顶部