怎样使用DMA传送内存块?(100分)

  • 主题发起人 主题发起人 kyq
  • 开始时间 开始时间
K

kyq

Unregistered / Unconfirmed
GUEST, unregistred user!
请问给出源地址、目的地址和长度,怎样使用DMA传送内存块啊?
(Win9x、 Win NT和Win2K都能用的)

Thanks in advance.
 
忘了说明一声,是同一进程内。
 
高手们,你们在哪啊?
 
是你的问题有错误:
DMA 是设备发出内存请求,绕过 CPU 的控制直接访问内存。注意,是设备!!!
你的程序算什么设备?难道是内存发请求,直接访问内存???你先洗洗脸,清醒一下。
 
不要太生气,小心老啊,那样挣钱就少啦。:P
找了些证据:

1. 谈谈DMA http://www.starinfo.net.cn/computer/a/fo810a.htm

2. 权威点的,http://www.cgeig.com.cn/djst14.htm
看看"1998年全国计算机等级考试三级A笔试试题"一(40)
(40)在现行PC机中,采用DMA从源地址传输数据到目的地址传输数据到目的地址时,
需要执行的DMA总线周期是几个?
A)4个 B)3个 C)2个 D)1个

3. 要不请解释一下DirectX中系统RAM到系统RAM的Blt操作的DMA特性是怎样实现的?

要不请推荐一个方案啊,要求每隔40ms传送峰值为4MB的数据,CPU占用率不能太高(<50%),
要求不能使用高于266Mhz的CPU。


 
由于实用的要求,要求收紧了,改为:
每隔25ms传送峰值为4MB的数据,CPU占用率不能太高(<30%)
 
只有通过控制机算机上的硬件(看是什么硬件了)才能发出dma请求
 
使用WDM来开发吧。
 
能否说明一下。
Tks.
 
如果你有权限的话, 你可以直接控制DMA控制器, 在DOS下编程很简单,
但我不知道在NT下怎么做.
 
算啦,分分掉算啦。

又多了一条不了了之的问题。
:(
 
不好意思不能回答
...
还要问个问题:
我用你上次的如下代码:
方法的返回值应该用OleVariant,而不用Variant。

类似

var
t:OleVariant;
....
t:=VarArrayCreate(varVariant,[0,2]);
t[0]:=123;
t[1]:='123';
t[2]:=123.0;
Result:=t;
....

ASP中
set comobj = CreateObject("ComName")
bb = ComObj.GetArray
Response.write(bb(0))
Response.write(bb(1))
Response.write(bb(2))
....
在Asp中,IsArray(bb)返回的是False;
且取bb(i)时出错,但在Delphi中可以
请问还有什么要注意么?
 
多人接受答案了。
 
后退
顶部