VirtualCopy()操作I/O口 物理地址为什么要移8位
(1)IO接口是XSCale处理器的外部设备,对于一般的单片机,可以直接操作硬件,即通过直接读写IO端口来访问硬件.而对于WICNE操作系统,它屏蔽了用户应用程序对硬件访问的权限,只有内核应用程序才可以访问硬件资源.如果要直接访问某一址的物理内存(对于ARM核的MCU,IO端口地址通常被映射到物理内存中,内存和IO统一编址)可以采用内存映射方法,将该硬件寄存器映射到普通的内存空间,像操作内存地址一样操作硬件寄存器.WINCE提供了VirtualAlloc()和VirtualCopy()函数, VirtualAlloc()负责在虚拟内存空间内保留一段虚拟内存,而VirtualCopy()负责把一段物理内存和虚拟内在绑定,这样最终对物理内存的访问就可以通过虚拟地址来进行了.
(2)首先使用VirtualAlloc 分配出一个虚拟的地址空间,代码如下:
pLightReg=(char*)VirtualAlloc(0,0x400,MEM_RESERVE,PAGE_READWRITE)
这样就分配出一个MEM_RESERVE类型的存储器空间,但它并没有占用实际内存空间,而是虚拟的地址空间.
接着将实际的硬件地址(例如LED的片选控制信号地址)映射到前面分配的虚拟地址空间,使用VirtualCopy函数建立起两个地址间的映射关系.代码如下:
VirtualCopy((PVOID)pLightReg,(PVOID)(pLightIoBaseAddress>>8),0x400,PAGE_READWRITE|PAGE_NOCACHE|PAGE_PHYSICAL)
这里pLightReg是前面分配的虚拟地址空间,而pLightIoBaseAddress为实际的硬件地址,需要将它右移8位,因为在函数中存储器分配是以256位为单位的.而后面的选项则是指定了映射地址的属性—可读.不缓冲以及硬件物理地址.
现在就可以使用虚拟地址访问原来不能直接访问的硬件地址了.
VirtualCopy()操作I/O口 物理地址为什么要移8位相关推荐
- N5766A lan口驱动(Qt msvc2017 32位实现)
lan口IP地址 连接安捷伦仪器首先需要知道其IP地址,此时需要点击安捷伦仪器前面板上的[LAN]按钮确认,例如我的IP地址是192.168.3.15,那么在程序编写时就需要设置此IP才能连接 ...
- io口模拟串口 1602显示数据位内容[转]
一个项目的一部分内容,让初学者模拟着做一下,还是很有用处的. 这样的程序可以实现一个51单片机有两个串口 #include<regx52.h> sbit BT_SND =P1^1; sbi ...
- 不能对本程序所在u盘进行操作,请把本程序目录移到其他分区再重新操作
U盘制作的文件别放在U盘里(放到电脑的其他盘符,只要文件不在U盘里就行,然后运行)因为启动它U盘就会格式化,如果在文件在U盘里,就无法运行
- MSP430F5529 DriverLib 库函数学习笔记(二)GPIO
目录 硬知识 一.MSP430单片机端口概述 二.通用IO端口输出特性 三.端口P1和P2 1.输入寄存器PxIN 2.输出寄存器PxOUT 3.方向寄存器PxDIR 4.上拉/下拉电阻使能寄存器Px ...
- C语言的奇经八脉——运算符
即使有了变量和常量,也不能进行日常程序的处理,需要用某种方式将变量常量的关系表示出来,这就是运算符的作用,就像任何零件都需要导线和一些小部件来进行链接才能发挥作用. 目录 运算符种类 运算符的优先级 ...
- 树莓派IO口驱动代码的编写、微机总线地址、物理地址、虚拟地址、BCM2835芯片手册
地址总线: 百度百科解释: 地址总线 (Address Bus:又称:位址总线) 属于一种电脑总线 (一部份),是由CPU 或有DMA 能力的单元,用来沟通这些单元想要存取(读取/写入)电脑内存元件/ ...
- gpio-sunxi驱动应用gpio口终端操作
内核里gpiolib可以操作gpio口,但基本只能作输入或输出功能.而全志的gpio控制器除这两种功能外,还提供了其它功能,如配置gpio的上下拉,输出电流等级大小等.所以全志提供了类似gpiolib ...
- STM32笔记 GPIO介绍及IO口操作 STM32F0 利用C语言位域实现仿位带操作
文章目录 GPIO简介 工作方式 相关寄存器介绍 IO 操作步骤 IO口三种操作细解 附录:C语言相关 偏移地址与绝对地址 GPIO简介 GPIO:每个连接到I/O总线上的设备都有自己的I/O地址集, ...
- 树莓派 IO 口驱动开发
关注+星标公众号,不错过精彩内容 转自 | 一口Linux IO开发是最基础的,也是入门必备技能,虽然很多已入门的读者来说,IO操作很简单,但对于很多初学者却不那么简单. 微机总线地址 地址总线: 百 ...
最新文章
- [转]PDO防注入原理分析以及使用PDO的注意事项
- TIMESTAMP 与 explicit_defaults_for_timestamp
- 我命由我不由天,5个月逆袭百度,头条AI岗位,来挑战吗?
- UNIX 高手的 20 个习惯
- android icon在线更新,Android在线更新下载方案
- laravel log 对象_swoole运行模式加速laravel应用的详细介绍(life)
- mysql 5.5 client 字符集_rhel4 mysql5.5 字符集_character set
- actor akka_如果您仍在使用同步,则应改用Akka Actor-这就是为什么
- LintCode刷题——打劫房屋I、II、III
- mysql 跳过checksum_MySQL-Utilities:mysqldbcompare及跳过复制错误
- Borland Delphi7 企业版注册方法
- 苹果电脑win10蓝牙音响卡顿_Macbook Pro 2017安装win10以后蓝牙鼠标卡顿
- MySQL中update语句的深入分析
- 射频遥控:固定码与学习码的区别
- zencart iis 伪静态设置 测试可用
- MySQL实现分数排名问题
- 数据库基础之位图索引
- 信号完整性分析-笔记
- 在线直播间和视频追帧【转载】
- 艾美捷针对性检测—游离维多珠单抗ADA水平检测试剂盒
热门文章
- charts引入icon图片_v-charts 踩坑之路
- spring-cloud学习demo,git地址
- dataGridview与下拉框高级绑定
- Linux网络-数据包的接收流程(基于RTL8139网卡驱动程序)
- mysql函数(五.流程控制函数)
- 5.14 js对象 函数 js操作document对象
- 如何编写一个python项目
- bzoj1094[ZJOI2007]粒子运动 计算几何
- 在ASP.NET Core使用Middleware模拟Custom Error Page功能
- 2008R2Win7管理九DNS冗余和恢复