(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位相关推荐

  1. N5766A lan口驱动(Qt msvc2017 32位实现)

    lan口IP地址     连接安捷伦仪器首先需要知道其IP地址,此时需要点击安捷伦仪器前面板上的[LAN]按钮确认,例如我的IP地址是192.168.3.15,那么在程序编写时就需要设置此IP才能连接 ...

  2. io口模拟串口 1602显示数据位内容[转]

    一个项目的一部分内容,让初学者模拟着做一下,还是很有用处的. 这样的程序可以实现一个51单片机有两个串口 #include<regx52.h> sbit BT_SND =P1^1; sbi ...

  3. 不能对本程序所在u盘进行操作,请把本程序目录移到其他分区再重新操作

    U盘制作的文件别放在U盘里(放到电脑的其他盘符,只要文件不在U盘里就行,然后运行)因为启动它U盘就会格式化,如果在文件在U盘里,就无法运行

  4. MSP430F5529 DriverLib 库函数学习笔记(二)GPIO

    目录 硬知识 一.MSP430单片机端口概述 二.通用IO端口输出特性 三.端口P1和P2 1.输入寄存器PxIN 2.输出寄存器PxOUT 3.方向寄存器PxDIR 4.上拉/下拉电阻使能寄存器Px ...

  5. C语言的奇经八脉——运算符

    即使有了变量和常量,也不能进行日常程序的处理,需要用某种方式将变量常量的关系表示出来,这就是运算符的作用,就像任何零件都需要导线和一些小部件来进行链接才能发挥作用. 目录 运算符种类 运算符的优先级 ...

  6. 树莓派IO口驱动代码的编写、微机总线地址、物理地址、虚拟地址、BCM2835芯片手册

    地址总线: 百度百科解释: 地址总线 (Address Bus:又称:位址总线) 属于一种电脑总线 (一部份),是由CPU 或有DMA 能力的单元,用来沟通这些单元想要存取(读取/写入)电脑内存元件/ ...

  7. gpio-sunxi驱动应用gpio口终端操作

    内核里gpiolib可以操作gpio口,但基本只能作输入或输出功能.而全志的gpio控制器除这两种功能外,还提供了其它功能,如配置gpio的上下拉,输出电流等级大小等.所以全志提供了类似gpiolib ...

  8. STM32笔记 GPIO介绍及IO口操作 STM32F0 利用C语言位域实现仿位带操作

    文章目录 GPIO简介 工作方式 相关寄存器介绍 IO 操作步骤 IO口三种操作细解 附录:C语言相关 偏移地址与绝对地址 GPIO简介 GPIO:每个连接到I/O总线上的设备都有自己的I/O地址集, ...

  9. 树莓派 IO 口驱动开发

    关注+星标公众号,不错过精彩内容 转自 | 一口Linux IO开发是最基础的,也是入门必备技能,虽然很多已入门的读者来说,IO操作很简单,但对于很多初学者却不那么简单. 微机总线地址 地址总线: 百 ...

最新文章

  1. [转]PDO防注入原理分析以及使用PDO的注意事项
  2. TIMESTAMP 与 explicit_defaults_for_timestamp
  3. 我命由我不由天,5个月逆袭百度,头条AI岗位,来挑战吗?
  4. UNIX 高手的 20 个习惯
  5. android icon在线更新,Android在线更新下载方案
  6. laravel log 对象_swoole运行模式加速laravel应用的详细介绍(life)
  7. mysql 5.5 client 字符集_rhel4 mysql5.5 字符集_character set
  8. actor akka_如果您仍在使用同步,则应改用Akka Actor-这就是为什么
  9. LintCode刷题——打劫房屋I、II、III
  10. mysql 跳过checksum_MySQL-Utilities:mysqldbcompare及跳过复制错误
  11. Borland Delphi7 企业版注册方法
  12. 苹果电脑win10蓝牙音响卡顿_Macbook Pro 2017安装win10以后蓝牙鼠标卡顿
  13. MySQL中update语句的深入分析
  14. 射频遥控:固定码与学习码的区别
  15. zencart iis 伪静态设置 测试可用
  16. MySQL实现分数排名问题
  17. 数据库基础之位图索引
  18. 信号完整性分析-笔记
  19. 在线直播间和视频追帧【转载】
  20. 艾美捷针对性检测—游离维多珠单抗ADA水平检测试剂盒

热门文章

  1. charts引入icon图片_v-charts 踩坑之路
  2. spring-cloud学习demo,git地址
  3. dataGridview与下拉框高级绑定
  4. Linux网络-数据包的接收流程(基于RTL8139网卡驱动程序)
  5. mysql函数(五.流程控制函数)
  6. 5.14 js对象 函数 js操作document对象
  7. 如何编写一个python项目
  8. bzoj1094[ZJOI2007]粒子运动 计算几何
  9. 在ASP.NET Core使用Middleware模拟Custom Error Page功能
  10. 2008R2Win7管理九DNS冗余和恢复