中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 紧急求助关于DOS下定义64K以上大数组是否可行啊?
作者:
标题: 紧急求助关于DOS下定义64K以上大数组是否可行啊? 上一主题 | 下一主题
yuruifeng1983
新手上路





积分 8
发帖 2
注册 2006-9-28
状态 离线
『楼 主』:  紧急求助关于DOS下定义64K以上大数组是否可行啊?

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

2006-9-28 09:41
查看资料  发送邮件  发短消息 网志  OICQ (58035441)  编辑帖子  回复  引用回复
firstsail
高级用户





积分 668
发帖 295
注册 2005-7-26
来自 广东深圳
状态 离线
『第 2 楼』:  

(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功能的。

2006-9-29 01:10
查看资料  访问主页  发短消息 网志   编辑帖子  回复  引用回复
yuruifeng1983
新手上路





积分 8
发帖 2
注册 2006-9-28
状态 离线
『第 3 楼』:  firsttsail,非常谢谢您的讲解!

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

2006-9-29 07:22
查看资料  发送邮件  发短消息 网志  OICQ (58035441)  编辑帖子  回复  引用回复
firstsail
高级用户





积分 668
发帖 295
注册 2005-7-26
来自 广东深圳
状态 离线
『第 4 楼』:  

您所用的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字节

2006-9-30 21:40
查看资料  访问主页  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: