WINCE驱动开发之DMA的使用

WinCE驱动开发全攻略:从环境搭建到性能优化 嵌入式系统开发中,驱动程序作为连接硬件与操作系统的桥梁至关重要。以Windows CE为代表的嵌入式操作系统采用模块化设计,其驱动架构包含本地设备驱动、流接口驱动等多种类型。开发过程中需要掌握中断处理、内存管理等核心技术,通过Platform Builder等工具链实现高效开发。在工业控制、医疗设备等应用场景中,优化后的WinCE驱动能显著提升系统响应速度和稳定性。本文以GPIO驱动为例,详解流驱动开发流程,并分享中断处理、DMA传输等性能优化技巧,帮助开发者解决驱动加载失败、中断延迟等常见问题。 阅读详情

DMA的使用

1、 芯片DMA的使用要点:

AK3224芯片的DMA使用中,RAM的地址作为DMA传输的目标地址、源地址,必须要4字节对齐。而且DMA的操作长度以内的RAM地址,必须连续。

不过在使用中发现:Nandflash驱动中RAM地址作为目标地址时,只需要2字节对齐。RAM地址作为源地址可不需对齐。(其他情况需要逐一验证)

2、 wince中的DMA使用:

根据DMA一次操作的RAM地址必须连续的特性,在驱动DMA使用时,我们需要确保虚拟地址映射的物理地址是连续的。有3个途径:

1:数据区地址是由应用层或者其他进程、线程传入的,驱动并不知道其虚拟地址对应的物理地址是否一直连续。

由于wince的内存申请,是以4K字节为一个页,一段数据的内存申请可能跨越多个页。因此,只要数据区长度大于1字节,就有可能其物理地址是跨越的、不连续的。为了确保DMA操作,我们必须查询这段数据区在RAM上的物理分布。

首先,得到数据区所在的虚拟页: VirPageStart = (ULONG)pSourceBuffer & 0xFFFFF000;

其次,得到数据区在页内的偏移地址 :offset = (ULONG)pSourceBuffer & 0x0FFF;

 

计算数据区是否跨越页段

if(offset + NumberOfBytes > 4096)

PageSize = WCE_UNIFORM_SIZE - offset;       //整个数据跨越此页,则DMA传输需要分多个部分,一次一个页段的传

else

PageSize = NumberOfBytes;                //数据区没有跨越页

由得到的页地址,查询映射的物理地址。

if(!LockPages((LPVOID)VirPageStart, 4096, &TransAddr, LOCKFLAG_READ))

{

        //异常处理

}

UnlockPages((LPVOID)VirPageStart, 4096);

得到了映射的物理地址TransAddr后,根据RAM是目标地址还是源地址,做进一步的处理。

假设一个数据区作为DMA源地址,大小为9K。在虚拟地址首页的偏移为4K。那么它必然跨越3个页段。

首先查询第一页的物理地址发送,第一个页的2K数据。然后查询第二页的物理地址,发送4K数据。最后查询第三页的物理地址,发送3K数据。


2:数据区的申请可以使用AllocPhysMem函数申请。

LPVOID AllocPhysMem(
DWORD cbSize,                 参数1:数据区大小
DWORD fdwProtect,             参数2:保护标记
DWORD dwAlignmentMask,         参数3:0(default system)
DWORD dwFlags,                参数4:0(Reserved for future use)
PULONG pPhysicalAddress         参数5:得到数据区对应的物理地址
);

AllocPhysMem函数返回值为指向申请后的虚拟地址指针。

如:pSerialHead->RxBufferInfo.RxCharBuffer =            //alloc physical memory

AllocPhysMem(pSerialHead->RxBufferInfo.Length + 16, PAGE_READWRITE, 0, 0, &RX_PhyAddr);

由于此函数必定申请到一片连续的物理地址,因此pSerialHead->RxBufferInfo.RxCharBuffer的使用不再需要查询是否跨越多个页段。

但是,AllocPhysMem函数申请的物理地址可能会跨越多个RAM CHIP。因此,在使用1片以上RAM芯片的系统中,依然需要查询是否跨越CHIP。

       AllocPhysMem函数使用后,需要使用FreePhysMem函数进行释放。

3:数据区可以在系统config.bib文件中,预先定义好一片连续、不跨越CHIP的RAM空间。

如下,系统保留了虚拟地址0x80024000开始,大小为0x3000的一段RAM。

SER_DMA                80024000 00003000 RESERVED

那么驱动DMA使用中,不再需要对这段内存,进行任何的查询动作。我们只需要在进程空间中做映射即可。

pSerialHead->RxBufferInfo.RxCharBuffer = VirtualAlloc(0, RX_PhySize, MEM_RESERVE, PAGE_NOACCESS);

    if (pSerialHead->RxBufferInfo.RxCharBuffer == NULL)
    {

        DEBUGMSG(ZONE_ERROR, (TEXT("COM_Init:: VirtualAlloc failed!/r/n")));

        return(NULL);

    }
    else
    {
        if (!VirtualCopy((PVOID)pSerialHead->RxBufferInfo.RxCharBuffer, (PVOID)(RX_PhyAddr),

            RX_PhySize, (PAGE_READWRITE | PAGE_NOCACHE)))
        {

           DEBUGMSG(ZONE_ERROR, (TEXT("COM_Init:: VirtualCopy failed!/r/n")));

           return(NULL);
        }
    }

上面这段程序中,先使用函数VirtualAlloc,在进程空间中申请一段保留的虚拟地址空间。然后使用VirtualCopy,把需要使用的物理地址空间,映射到已经申请好的虚拟地址上。使用完毕,必须使用函数VirtualFree进行释放。

LPVOID VirtualAlloc(

LPVOID lpAddress,                  
DWORD dwSize,
DWORD flAllocationType,
DWORD flProtect
);

BOOL VirtualCopy(
LPVOID lpvDest,
LPVOID lpvSrc,
DWORD cbSize,
DWORD fdwProtect
);

BOOL VirtualFree(
LPVOID lpAddress,
DWORD dwSize,
DWORD dwFreeType
);

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/yexinghai/archive/2009/04/10/4062594.aspx

VXLAN技术详解 VXLAN(虚拟可扩展局域网)是一种Overlay二层虚拟化技术,通过MAC-in-UDP封装在IP网络上构建大规模虚拟二层网络。核心组件包括VTEP(隧道端点)、24位VNI(支持1600万个虚拟网络)和VXLAN网关。相比VLAN,VXLAN具有超大规模扩展、跨三层互联、支持虚拟机无缝迁移等优势,适用于云数据中心多租户隔离、跨数据中心互联等场景。其基于IP路由的封装方式无需改造物理网络,为现代云网络提供了弹性、安全的虚拟化解决方案。 阅读详情

相关推荐

电机系列(1) - foc最基本原理、clark变换 、park变换、附代码

什么是FOC? FOC(Field-Oriented Control),直译是磁场定向控制,也被称作矢量控制 (VC,Vector Control) ,是目前无刷直流电机(BLDC)和永磁同步电机(PMSM)高效控制的最优方法之一。FOC旨在通过精确地控制磁场大小与方向,使得电机的运动转矩平稳、噪声小、效率高,并且具有高速的动态响应。 简单来说就是,FOC是一种对无刷电机的驱动控制方法,它可以让我们对无刷电机进行 “像素级” 控制,实现很多传统电机控制方法所无法达到的效果。 因为所谓的“矢量控制”其实就是

nepqiu的博客 7万+

winCE中采用DMA传输数据的方法

转载请标明是引用于 http://blog.youkuaiyun.com/chenyujing1234 对于文章中有什么意见或是需要代码的可以留言联系我。 1、DMA入口 // DDM控制器能服务的外围设备配置信息的结构体 typedef struct { BOOL Valid; // 表明此逻辑设备是否可用 ULONG ChanCfg; // DDMA 通道配置 (每个通道特有的)

chenyujing1234的专栏 3982

HR效率翻倍!用Dify+飞书AI表格打造自动化简历处理流水线(附完整代码)

本文详细介绍了如何利用Dify工作流和飞书多维表格构建自动化简历处理系统,实现简历上传、AI智能解析与结构化数据入库的全流程自动化。通过整合大语言模型进行信息抽取,该系统能显著提升HR处理简历的效率与准确性,将HR从重复劳动中解放出来。

1a2s3d4f5g的博客 1025

如何快速掌握DMA内存修改:CheatEngine插件完整指南

想要轻松实现游戏内存修改却苦于复杂的技术门槛?CheatEngine-DMA插件正是为你量身打造的DMA内存修改神器!这款强大的CE插件采用直接存储器访问技术,让游戏内存读写变得前所未有的简单高效。无论你是游戏修改爱好者还是逆向工程初学者,都能通过本教程快速上手。 ## 🔧 什么是DMA内存修改技术? DMA(Direct Memory Access)直接存储器访问技术是一种绕过CPU直接操

gitblog_00274的博客 982

Bartender 2021破解版安装教程:手把手教你从下载到激活(附详细步骤图)

本文详细介绍了BarTender 2021专业版的安装与高效应用指南,从基础配置到高级条码设计,帮助用户快速掌握标签设计与打印技术。内容涵盖安装步骤、标签模板创建、数据连接与批量打印技巧,以及高级功能如安全策略与自动化集成,适合零售、物流、制造等行业用户提升工作效率。

p4q5r6s7t的博客 2623

车载机器人终极解决方案:从功能叠加到生态融合的颠覆性变革

本文提出一种融合智能汽车与家居技术的车载机器人架构。其创新点包括:1)基于多模态传感器的拟人化硬件设计,实现声源定位误差<5°、体温检测精度±0.3℃;2)跨模态情感计算引擎,综合面部表情、心率等数据构建三维情绪模型;3)协议自适应中间件,支持小米、华为等多品牌智能家居设备即插即用;4)环境自适应舵机控制,-30℃环境下扭矩保持率达92.5%。测试数据显示,该方案使交互步骤减少60%,用户满意度提升58%,日均使用时长增加2.3倍,为"人-车-家"生态融合提供了可行技术路径。

qq_42671193的博客 1124

CE代码注入

本教程由CCB原创,转载时请征得本人同意并注明。代码注入(CODE INJECTION)是对付动态内存分配(DMA)游戏的常用方法。这个教程目的是想让你了解有关代码注入方面的相关知识,并以CE的TUTORIAL为实例来说明一下实际的操作。选择CE的TUT来做实例是因为大家手头上基本上都有CE,并且TUT第六步使用的就是DMA,这样可以以最简单的方法让大家最快地接触和理解代码注入的原理和实际操作。这

2579

项目计划书、规划文档模板

项目计划书、规划文档模板 最近通过项目实践经历,整理出的一套项目计划书(仅供自己参考梳理思路使用) 有喜欢的文末加VX 辛苦码字如有转载请标明出处谢谢!——木研 更新的简版项目规划文档! 原版文件请+vx :baierfa ...

weixin_43194923的博客 987

DMA内存修改从零入门:CheatEngine-DMA插件完整使用指南

如果你正在寻找一种低风险内存修改方案,那么"DMA内存修改"这四个字你一定绕不开。CheatEngine-DMA 正是一款专为 DMA 硬件用户打造的 Cheat Engine 插件,它把游戏内存分析从"软件层读写"直接升级为"硬件级物理内存访问",让修改这件事既快又隐蔽。这篇文章不谈玄学,只讲一件事:从零开始,怎么把这块插件跑起来,并真正用它完成一次完整的内存修改。 ## 凌晨两点,你为什么还

gitblog_00756的博客 215

SDM量化噪声等效到PLL输出的传递函数推导

在历年文章或书本中少见SDM量化噪声等效到PLL输出的传递函数推导。需了解SDM量化噪声的本质,配合欧拉方程简化,并将Z域转化成S域。最终结合断环处等效到PLL输出的传递函数,方可完成。

u010486560的博客 1406

从零到一:基于Docker与Gewechat协议,打造高可用微信AI助手

本文提供了一份从零开始的实战指南,详细讲解如何利用Docker容器化技术与Gewechat协议,构建一个高可用、低风险的微信AI助手。通过整合Dify AI平台,您可以为微信机器人注入大语言模型的智能,实现自动问答、知识库查询等高级功能,显著提升个人或团队在微信场景下的沟通与信息处理效率。

weixin_29280657的博客 160

零基础玩转CheatEngine-DMA:从安装到内存分析实战指南

### 1.1 什么是DMA技术 **直接内存访问(DMA)** 是一种允许外部设备直接与计算机内存进行数据传输的技术,无需CPU干预。在内存分析场景中,DMA技术能够绕过传统内存保护机制,实现对目标进程内存的直接访问,为游戏调试和内存研究提供了独特优势。 ### 1.2 CheatEngine-DMA插件定位 CheatEngine-DMA是专为DMA硬件用户设计的Cheat Engine扩展

gitblog_00718的博客 182

计算机视觉:AI生成内容(AIGC)对视觉领域的冲击

计算机视觉:AI生成内容(AIGC)对视觉领域的冲击​ 人工智能,计算机视觉,大模型,AI,在信息技术日新月异的当下,计算机视觉作为人工智能领域的关键分支,已经深度融入了我们生活与工作的各个层面。从安防监控系统里精准的人脸识别,助力维护公共安全;到工业生产线上高效的产品质量检测,保障产品品质;再到医疗影像分析中为疾病诊断提供有力支持,计算机视觉技术凭借其对视觉信息的强大处理与理解能力,不断推动着各行业的发展与变革。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 17万+

Wince驱动开发学习:寄存器、DMA、中断使用

一:寄存器的使用:1、wince内部对物理地址的访问:可以有3个途径。1:直接使用g_oalAddressTable(oemaddrtab_cfg.inc)的已经定义好的,物理地址对应的虚拟地址。如:DCD     0x80000000, 0x30000000, 128     ;访问虚拟地址0x80000000实际就是访问物理地址0x30000000。2:在OAL层,

疯子之徒 1313

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

近期关于“WINCE驱动开发之DMA的使用”讨论

<br />以下是MSDN中的说法:<br />The Windows CE NDIS implementation does not support direct memory access (DMA). Do not use the NdisSetupDmaTransfer, NdisCompleteDmaTransfer, NdisMRegisterDmaChannel, NdisMDeregisterDmaChannel, NdisMAllocateMapRegisters, NdisMFreeMa

HTTP 404 1436

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

wince驱动开发一

<br />一:寄存器的使用:<br />1、wince内部对物理地址的访问:<br />可以有3个途径。<br />1:直接使用g_oalAddressTable(oemaddrtab_cfg.inc)的已经定义好的,物理地址对应的虚拟地址。<br />如:<br />DCD     0x80000000, 0x30000000, 128     ;<br />访问虚拟地址0x80000000实际就是访问物理地址0x30000000。<br /> <br />2:在OAL层,使用OALPAtoVA函数。<

ayin668的专栏 682

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

WINCE下的网卡驱动开发序

好久没有写原创的文章了,不怕丢人的说,前段时间在忙着考六级,不过这次又走了一次过场! 哎,不说这个了! 这段时间,老大给的任务是网卡驱动的开发,主要是完成网卡的开发,先参照目前市场上流行的CS8900和DM9000,完成数据包的收发,然后再考虑DMA传输方式,因为在我们的项目里需要传输视频流,我们的方案构思时采用DMA传输,一方面传输的数据量大,因为我们要传送广电的视频流的,甚至最大要...

weixin_30725467的博客 194

WINCE声音驱动模型概述(3)--放音的消息解析

放音的消息解析WINCE的声音驱动模型在放音的工作中定义了21个消息(懒了,不再列举了),但在具体实现中并不是每个消息都必须实现。消息很多,特别是在具体实现中需要和DMA操作模型配合使用,因此理解消息的用途和推敲它们之间的关系就显得格外重要了!通过仔细推敲它们之间的关系,我们可以将放音的整个过程规划成如下一些状态,并用状态迁移图来理解消息的使用,整个过程的操作就非常简单了。

Tech is Online(物联网技术传播) 1836

WinCE SD card技术了解并WINCE下SDHC驱动开发

【WinCE】SD card技术了解并WINCE下SDHC驱动开发(updated) SD Card Driver on ADS Summary 了解SD card WinCE 5.0下SD Stack Bus Driver Host Controller Driver Client Driver SD on MX31 ADS Secure Digital Ho

cjwsimple 1840

S3C2440的camera接口特性及WinCE 下的驱动

http://blog.youkuaiyun.com/figthter_cui/article/details/5974717   S3C2440是应用十分广泛且适用于嵌入式系统的一款嵌入式处理器。winCE 5.0/6.O是微软公司开发的一款专用于嵌入式系统的实时操作系统。其模块化设计使开发人员可以根据需求定制设备。目前,国内大部分OEM商都提供了对S3C2440的camera接口在WinCE5.O

landishu的专栏 845

嵌入式系统开发学习(三)--驱动程序的设计

驱动程序的基础知识1、驱动程序的功能为应用程序提供接口,上层应用程序无需知道这台机器上硬件是什么型号,只要调用系统的函数就可以实现相应的功能。而驱动程序就是和硬件打交道,为上层提供服务,实现对下层的操作。2、何时编写驱动程序操作系统没有内置支持的硬件(常见)一些第三方或者自制的硬

zhang20072844的专栏 2646

转:S3C2440的camera接口特性及WinCE 下的驱动(3)

S3C2440的camera接口特性及WinCE 下的驱动时间:2010-09-10 10:28:18 来源:单片机与嵌入式系统 作者:魏银库<br /> <br />    注意:C通道和P通道应分别分配。分配成功后,应将4组YCbCr信号的起始地址与分配给C通道的DMA缓冲区地址关联起来,将4组RGB信号的起始地址与分配给P通道的DMA缓冲区地址关联起来。格式不同时,关联的空间大小是不同的。如果C通道格式为YCbCr4:2:2,图像宽度为CoDstWidtlh,图像高度为CoDstHeight,分配的D

bbw2008的专栏 1165

wince 驱动介绍

1、基础知识: 1)系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件细节,在应用程序看来硬件只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作。设备驱动是内核的一部分。 2)驱动程序完成以下功能: ——对设备初始化和释放; ——把数据从内核传送到硬件和从硬件读取数据; ——读取应用程序传

377

S3C2440的camera接口特性及WinCE 下的驱动(转载)

摘要:分析S3C2440的camera接口特性,介绍当摄像设备为CCD摄像头时,在WinCE 5.0/6.O操作系统环境下开发camera驱动的方法。该方法弥补了目前国内在WinCE 5.0/6.0操作系统环境下CCD摄像头无法连接到S3C2440的camera接口的缺陷。   S3C2440是应用十分广泛且适用于嵌入式系统的一款嵌入式处理器。winCE 5.0/6.O是微软公司开发的一款专用于嵌

667
上一篇: RTC驱动-2450
下一篇: 开发wince下的usb音频设备驱动总结
alien75
博客等级 码龄25年 195粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值