阅读:1401回复:4
实时写硬盘的问题
我做一个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 如果答的好,我舍得给分。 |
|
沙发#
发布于:2002-10-05 14:36
首先,你要明白硬盘持续数据率是多少,告诉你一个事实,大多数硬盘虽然宣称采用UDMA接口100MB,内部数据率>35MB/s,但长期持续数据率远远达不到你所说的8MB/s,其次,在Windows 下硬盘的读写比较复杂,因此影响到速率,此外,还有硬盘本身的原因,比如寻道延时等。对你的应用来说,硬盘是非实时器件,解决的办法是必须要用大的数据缓冲区,比如你所说的加64MB缓存。
|
|
板凳#
发布于:2002-10-05 14:44
另外,你可以试试多线程技术,在中断程序中仅设置读写标志,然后写一个独立的线程专门监测读写标志和写硬盘数据。可能会解决,但不能保证记录每周期的数据,因为Windows是非实时的!稳妥的方法是中间加一个数据缓存(如大数组)。
|
|
地板#
发布于:2002-12-05 10:43
8MB/s流盘,很难做到。
我试下来,可以稳定在5MB/s左右。 现在我的项目用40MB/s(采样直接流盘),我是用ADAPTEC 29160 SCSI卡配15000 ST硬盘做到的。 |
|
|
地下室#
发布于:2002-12-05 10:44
8MB/s流盘,很难做到。因为File System的问题。
我试下来,可以稳定在5MB/s左右。 现在我的项目用40MB/s(采样直接流盘),我是用ADAPTEC 29160 SCSI卡配15000 ST硬盘做到的。而且不能用File System,后来用ASPI搞定。 |
|
|