Board logo

标题: 紧急求助关于DOS下定义64K以上大数组是否可行啊? [打印本页]

作者: yuruifeng1983     时间: 2006-9-28 09:41    标题: 紧急求助关于DOS下定义64K以上大数组是否可行啊?

大家好!!
       我有个这方面的问题想请教大家,很急想得到结果啊,好吗?
    是这样的,我自己开发了一块采集板,用的是DOS操作系统来对采集板进行操作,其中最主要的一个环节就是想要一次性同时得到最大128Kbit的数据量,用于分析和计算处理。而现在我本身定义一个超过了几十K大小的数组比如float Y[98*1024]的数组,主程序根本就不能运行下去,必须要减少这个数组大小才行,  但是我需要的是这么大容量的数组啊,那怎么样才能够在DOS系统下面解决这个问题呢?
   关于有些大侠所说的huge 模式是不是可以解决这个问题呢?可以告诉我吗?谢谢!
急切期待您的回复!
作者: firstsail     时间: 2006-9-29 01:10
(1)您可以用farmalloc分配超过64K的内存
     unsigned char far * pMemory = (unsigned char far *)farmalloc(128L * 1024L);

       不再需要该内存块后,不要忘记释放内存farfree((void far *)pMemory);

(2)如果您采样的数据可被打断,则可分段采样,然后将各段数据放入“扩展内存”。

     for (int i = 0; i < nSeg; i++)
     {
        //采样数据
        .......
   
       //将采样的数据放入扩展内存,这将占用大量CPU时间,切记!
       .......
     }

(3)如果您采样的数据中间不可被打断,farmalloc又不成功,您只能重新
设计您的“采样卡”硬件, 将您的“采样卡”设计成具有至少128K字节存贮器
的FIFO的采样卡。高档或快速AD采样卡,都是带有FIFO功能的。
作者: yuruifeng1983     时间: 2006-9-29 07:22    标题: firsttsail,非常谢谢您的讲解!

firsttsail,非常谢谢您的讲解!
   您说 的 第一个就是关于远指针的概念啊,我很想用这种方式来定义一个128K大小的数组。还有,我设计的采集卡是用了一片FPGA的,ALTERA公司的。这片FPGA内部可以开辟FIFO存储区,但是容量没有您说的那么大,我设计的是4Kbit大小的FIFO区,每次达到半满的时候就将半满的数据读走,并且放到上面所说的128K大小的数组中去,供后面程序调用啊!
   这样的话,用这种远指针的方式应该可以解决这个问题吧?
   非常谢谢您!
作者: firstsail     时间: 2006-9-30 21:40
您所用的FPGA是什么型号的,市场价大约多少?

(1)如果设计的AD卡是FIFO存贮器是4K大小的FIFO区,每次达到半满的时候就将半满的数据读走。要达到这功能,必须“读”AD卡的存贮器与AD的FIFO写“存贮器”操作不能冲突。有不少工控大公司具有FIFO功能的AD卡都达不到这个指标。

(2)如果您的采速率超过100KHz,只能设计成128K深度的FIFO才行。因为读一半数据,就要I/O 2K次以上,这将消耗大量的CPU时间,往往还未读完2K字节,FIFO已经满了,造成掉数据点。

(3)如果您是8位AD,128K--->128K字节。
   如果您是16位AD,128K->256K字节
   如果您是24位AD,128K->384K字节