安暮雨 发表于 2024-1-18 00:00:32

易语言DMA分散读例子

如果对你有帮助,请给个好评吧~.~


.版本 2

.程序集 读写
.程序集变量 进程PID, 整数型
.程序集变量 分散读写句柄, 整数型

.子程序 DMA初始化, 整数型
.局部变量 数组参数, 文本型, , "0"

数组参数 = { “”, “-device”, “fpga” }
VMM句柄 = VMMDLL_Initialize (取数组成员数 (数组参数), 数组参数)
返回 (VMM句柄)

.子程序 DMA关闭

DMA分散关闭 (分散读写句柄)
VMMDLL_CloseAll ()

.子程序 DMA取模块地址, 长整数型
.参数 模块名称, 文本型

返回 (VMMDLL_ProcessGetModuleBaseU (VMM句柄, 进程PID, 模块名称))

.子程序 DMA设置进程
.参数 ID, 整数型

进程PID = ID
分散读写句柄 = DMA分散初始化 (ID)

.子程序 DMA取进程ID, 整数型
.参数 进程名称, 文本型
.局部变量 ID, 整数型

VMMDLL_PidGetFromName (VMM句柄, 进程名称, ID)
返回 (ID)

.子程序 DMA读字节集, 字节集, , EX
.参数 ID, 整数型
.参数 地址, 长整数型
.参数 长度, 整数型
.局部变量 返回值, 字节集

返回值 = 取空白字节集 (长度)
VMMDLL_MemReadEx (VMM句柄, ID, 地址, 返回值, 长度, 0, 1)
返回 (返回值)

.子程序 DMA读字节集_分散, 字节集
.参数 地址, 长整数型
.参数 长度, 整数型
.局部变量 返回值, 字节集

.如果真 (分散读写句柄 > 0)
    .如果真 (DMA分散设置 (分散读写句柄, 地址, 长度))
      .如果真 (DMA分散执行 (分散读写句柄))
            返回值 = DMA分散读取 (分散读写句柄, 地址, 长度)
            DMA分散清除 (分散读写句柄, PID, 1)
      .如果真结束

    .如果真结束

.如果真结束
返回 (返回值)

.子程序 写字节集, 逻辑型
.参数 地址, 整数型
.参数 数据, 字节集

返回 (VMMDLL_MemWrite (VMM句柄, 进程PID, 地址, 数据, 取字节集长度 (数据)))

.子程序 读字节集, 字节集
.参数 地址, 长整数型
.参数 长度, 整数型

返回 (DMA读字节集 (进程PID, 地址, 长度))

.子程序 读文本型, 文本型
.参数 地址, 长整数型

返回 (取字节集数据 (读字节集 (地址, 10), 10, ))

.子程序 读逻辑型, 逻辑型
.参数 地址, 长整数型

返回 (取字节集数据 (读字节集 (地址, 4), #逻辑型, ))

.子程序 读长整数, 长整数型
.参数 地址, 长整数型

返回 (取字节集数据 (读字节集 (地址, 8), #长整数型, ))

.子程序 读整数型, 整数型
.参数 地址, 长整数型

返回 (取字节集数据 (读字节集 (地址, 4), #长整数型, ))

.子程序 读小数型, 小数型
.参数 地址, 长整数型

返回 (取字节集数据 (读字节集 (地址, 4), #小数型, ))

.子程序 DMA分散初始化, 整数型
.参数 dwPID, 整数型

返回 (VMMDLL_Scatter_Initialize (VMM句柄, dwPID, 位与 (1, 32)))

.子程序 DMA分散设置, 逻辑型
.参数 hs, 整数型
.参数 地址, 长整数型
.参数 长度, 整数型

返回 (VMMDLL_Scatter_Prepare (hs, 地址, 长度))

.子程序 DMA分散读取, 字节集
.参数 hs, 整数型
.参数 地址, 长整数型
.参数 长度, 整数型
.局部变量 _局部1, 字节集
.局部变量 _局部2, 整数型

_局部1 = 取空白字节集 (长度)
VMMDLL_Scatter_Read (hs, 地址, 长度, _局部1, _局部2)
返回 (_局部1)

.子程序 DMA分散执行, 逻辑型
.参数 hs, 整数型

返回 (VMMDLL_Scatter_ExecuteRead (hs))

.子程序 DMA分散关闭
.参数 hs, 整数型

VMMDLL_Scatter_CloseHandle (hs)

.子程序 DMA分散清除, 逻辑型
.参数 hs, 整数型
.参数 dwpid, 整数型
.参数 flags, 整数型

返回 (VMMDLL_Scatter_Clear (hs, dwpid, flags))


.版本 2

.DLL命令 VMMDLL_PidGetFromName, 逻辑型, "vmm.dll", "@VMMDLL_PidGetFromName"
    .参数 句柄, 整数型
    .参数 进程名称, 文本型
    .参数 返回进程ID, 整数型, 传址

.DLL命令 VMMDLL_CloseAll, , "vmm.dll", "@VMMDLL_CloseAll"

.DLL命令 VMMDLL_ProcessGetModuleBaseU, 长整数型, "vmm.dll", "@VMMDLL_ProcessGetModuleBaseU"
    .参数 句柄, 整数型
    .参数 PID, 整数型
    .参数 模块名称, 文本型

.DLL命令 VMMDLL_MemWrite, 逻辑型, "vmm.dll", "@VMMDLL_MemWrite"
    .参数 句柄, 整数型
    .参数 PID, 整数型
    .参数 地址, 长整数型
    .参数 写入值, 字节集, 传址
    .参数 长度, 整数型

.DLL命令 VMMDLL_MemReadEx, 逻辑型, "vmm.dll", "@VMMDLL_MemReadEx"
    .参数 句柄, 整数型
    .参数 PID, 整数型
    .参数 地址, 长整数型
    .参数 返回值, 字节集, 传址
    .参数 长度, 整数型
    .参数 pcbReadOpt, 整数型, 传址
    .参数 flags, 长整数型

.DLL命令 VMMDLL_Initialize, 整数型, "vmm.dll", "@VMMDLL_Initialize"
    .参数 数量, 整数型
    .参数 参数, 文本型, 数组
.版本 2

.DLL命令 VMMDLL_Scatter_Initialize, 整数型, "vmm.dll", "@VMMDLL_Scatter_Initialize", , HS
    .参数 句柄, 整数型
    .参数 PID, 整数型
    .参数 flags, 整数型, , 1

.DLL命令 VMMDLL_Scatter_CloseHandle, , "vmm.dll", "@VMMDLL_Scatter_CloseHandle", , HS
    .参数 hs, 整数型

.DLL命令 VMMDLL_Scatter_ExecuteRead, 逻辑型, "vmm.dll", "@VMMDLL_Scatter_ExecuteRead", , HS
    .参数 hs, 整数型

.DLL命令 VMMDLL_Scatter_Read, 逻辑型, "vmm.dll", "@VMMDLL_Scatter_Read"
    .参数 hs, 整数型
    .参数 va, 长整数型
    .参数 cd, 整数型
    .参数 pb, 字节集, 传址
    .参数 pcbRead, 整数型, 传址

.DLL命令 VMMDLL_Scatter_Prepare, 逻辑型, "vmm.dll", "@VMMDLL_Scatter_Prepare"
    .参数 hs, 整数型
    .参数 va, 长整数型
    .参数 cd, 整数型

.DLL命令 VMMDLL_Scatter_Clear, 逻辑型, "vmm.dll", "@VMMDLL_Scatter_Clear"
    .参数 hs, 整数型
    .参数 pid, 整数型
    .参数 flags, 整数型

A飞雪 发表于 2024-5-1 22:54:04


谢谢大佬分享

蔡畅 发表于 2024-2-9 14:57:16

谢谢大佬分享

qq3712244 发表于 2024-1-18 01:04:43

谢谢大佬分享

qq3712244 发表于 2024-1-18 01:01:34

收jdDMA源码
页: [1]
查看完整版本: 易语言DMA分散读例子