驱动程序(12) Windriver下访问虚拟设备内存资源的方法

本文介绍了如何在Windriver环境下访问通过DMA传输完成后保留的虚拟设备内存资源。首先,详细阐述了虚拟设备的制作过程,然后重点讲解了两种从虚拟设备中读取数据的方法:一是使用API函数WDC_ReadAddr32(),二是提取设备句柄信息并利用WDC_ReadMem32()函数,后者在效率上更优。
摘要由CSDN通过智能技术生成
前言

在驱动程序(10)里曾经讲过有一种方法,可以把电脑端的一部分内存保留下来制成类似于虚拟设备,只提供给windriver使用,从而作为DMA传输的目的地址。现在讲一下当DMA传输完成之后,如何去访问这块内存资源。实际上,我们就可以将这部分内存资源看成挂载在了虚拟设备上,可以通过访问真实外部设备一样去访问虚拟设备。

虚拟设备制作

#define ReservedMemBase 0x42f000000   //保留内存的物理基地址
#define ReservedMemLength 0x40000000  //保留内存的长度

int main(void)
{
   
	WDC_DEVICE_HANDLE ReservedMemDev = NULL;
	//获取保留内存虚拟生成的设备句柄
	ReservedMemDev = GetReservedMemHandle((PHYS_ADDR)ReservedMemBase, ReservedMemLength);
	
	//打印所有设备内存资源的相关信息
	//PrintDeviceMemInfo(ReservedMemDev);

	//获得该设备句柄的设备信息
	WDC_DEVICE  *device = (WDC_DEVICE*)ReservedMemDev;
	//获取保留内存经过映射后的用户态下的虚拟基地址
	DWORD *pBuf = (DWORD*)device->pAddrDesc->pUserDirectMemAddr;
	printf("Reserved Memory UserMode Address is 0x%p, length is 0x%x\n", pBuf, MappingMemLength);
	printf("\n");
}


WDC_DEVICE_HANDLE GetReservedMemHandle(PHYS_ADDR pRes
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值