社区
嵌入开发(WinCE)
帖子详情
IO范围和物理内存地址是如何对应的?
dahua
2010-06-04 09:20:47
一块ISA的卡,IO范围是 0x2C0 -- 0x2C7
插在PC104的ISA槽里
系统是WinCE5.0
现在想在应用层用读写物理内存的方式操作IO
用VirtualAlloc和VirtualCopy这两个API把物理内存映射到虚拟内存
那这个IO范围对应的物理内存地址是多少?是怎么计算的?
敬请指点
...全文
335
18
打赏
收藏
IO范围和物理内存地址是如何对应的?
一块ISA的卡,IO范围是 0x2C0 -- 0x2C7 插在PC104的ISA槽里 系统是WinCE5.0 现在想在应用层用读写物理内存的方式操作IO 用VirtualAlloc和VirtualCopy这两个API把物理内存映射到虚拟内存 那这个IO范围对应的物理内存地址是多少?是怎么计算的? 敬请指点
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shellgo
2010-06-08
打赏
举报
回复
应该可以直接申请的吧,
ps:epc8000有bsp包吗?周立功的板子如何啊?
dahua
2010-06-08
打赏
举报
回复
已经解决了,厂家说这个ISA基地址不公开
不过提供了一个ISAIO的类库供调用
直接用了他们提供的函数,不用VirtualXXX了
谢谢各位细心的指点!
rushonin
2010-06-07
打赏
举报
回复
你要看你芯片的datasheet或者bsp的OEMAddressTable
, ISA口对应的起始地址是多少,你说的0x2C0 -- 0x2C7应该是offset。要加baseaddr上去得到Paddr。
这就是你的物理地址,
首先virtualalloc一块虚拟内存(7个字节)Vaddr
然后调用virtualcopy(Vaddr,Paddr,flag)
你就可以直接用Vaddr来用物理地址了
Linux_lee
2010-06-06
打赏
举报
回复
找到那个映射表,就可以直接在应用中操作了,
是在找不到,也可以先VirtualCopy下,再打印出来就知道地址了,以后直接定义一个指针就可以操作了!
Ei
2010-06-04
打赏
举报
回复
[Quote=引用 10 楼 dahua 的回复:]
BOOL VirtualCopy(
LPVOID lpvDest,
LPVOID lpvSrc,
DWORD cbSize,
DWORD fdwProtect
);
那我用VirtualCopy操作物理内存的话,第2个参数lpvSrc应该填哪个值?
[/Quote]
(0x2C000000>>8),fdwProtect加上PAGE_PHYSICAL。
dahua
2010-06-04
打赏
举报
回复
BOOL VirtualCopy(
LPVOID lpvDest,
LPVOID lpvSrc,
DWORD cbSize,
DWORD fdwProtect
);
那我用VirtualCopy操作物理内存的话,第2个参数lpvSrc应该填哪个值?
LH806732
2010-06-04
打赏
举报
回复
[Quote=引用 8 楼 dahua 的回复:]
好的,硬件在家里,回去找找看,非常感谢。
再问几个细的问题
1. 主板是买周立功的,系统都是做好了的,我没用PB,也没有BSP。那CE的Platform目录里会有这些Inc文件是么?
2. 你看看文件里的格式我理解的对不对
DCD 0x90500000, 0x2C000000, 64 ; BULVERDE: PCMCIA S0 common memory space.
0x905……
[/Quote]
0x90500000是虚拟地址起始地址(物理起始地址映射后的虚拟地址);
0x2C000000物理地址的起始地址;
64就是物理地址0x2C000000开始的64M内存大小
dahua
2010-06-04
打赏
举报
回复
好的,硬件在家里,回去找找看,非常感谢。
再问几个细的问题
1. 主板是买周立功的,系统都是做好了的,我没用PB,也没有BSP。那CE的Platform目录里会有这些Inc文件是么?
2. 你看看文件里的格式我理解的对不对
DCD 0x90500000, 0x2C000000, 64 ; BULVERDE: PCMCIA S0 common memory space.
0x90500000这个是物理内存地址?
0x2C000000这个是IO基地址?
64 这个是长度?
我要找的物理内存地址就是0x90500000?
3. 插在ISA上的板子是我老师自己做的,没有驱动,在Inc文件里应该不会出现吧?那应该找哪一项?
seu_dust
2010-06-04
打赏
举报
回复
这个就是虚拟地址和物理地址的内存映射表,静态映射是不会变的,一般在BSP的inc文件夹下,实在不行,你在PB里面搜索一下关键字也能找到。
dahua
2010-06-04
打赏
举报
回复
呃,发现我在这块真的知识贫乏 :(
基本上看不懂,只好再问
类似这样的文件在哪里找?CE的哪个系统目录里?还是硬件的SDK里?
文件格式的每一块是什么意思?
DCD 0x90500000, 0x2C000000, 64 ; BULVERDE: PCMCIA S0 common memory space.
0x90500000这个是内存地址?
0x2C000000这个是什么?
64 这个是什么?
我要找的物理内存地址对应哪个值?
每次启动后映射到的地址不会变吧?
麻烦你再辛苦解答一下,谢谢!
seu_dust
2010-06-04
打赏
举报
回复
类似oemaddrtab_cfg.inc这样的头文件,里面好似类似于
ALIGN
g_oalAddressTable
DCD 0x80000000, 0xA0000000, 64 ; MAINSTONEII: SDRAM (64MB).
DCD 0x84000000, 0x5C000000, 1 ; BULVERDE: Internal SRAM (64KB bank 0).
DCD 0x84100000, 0x58000000, 1 ; BULVERDE: Internal memory PM registers.
DCD 0x84200000, 0x4C000000, 1 ; BULVERDE: USB host controller.
DCD 0x84300000, 0x48000000, 1 ; BULVERDE: Memory controller.
DCD 0x84400000, 0x44000000, 1 ; BULVERDE: LCD controller.
DCD 0x84500000, 0x40000000, 32 ; BULVERDE: Memory-mapped registers (peripherals).
DCD 0x86500000, 0x3C000000, 64 ; BULVERDE: PCMCIA S1 common memory space.
DCD 0x8A500000, 0x38000000, 64 ; BULVERDE: PCMCIA S1 attribute memory space.
DCD 0x8E500000, 0x30000000, 32 ; BULVERDE: PCMCIA S1 I/O space.
DCD 0x90500000, 0x2C000000, 64 ; BULVERDE: PCMCIA S0 common memory space.
DCD 0x94500000, 0x28000000, 64 ; BULVERDE: PCMCIA S0 attribute memory space.
DCD 0x98500000, 0x20000000, 32 ; BULVERDE: PCMCIA S0 I/O space.
DCD 0x9A500000, 0xE0000000, 1 ; MAINSTONEII: Zero-bank (in reserved slot - no physical memory required).
DCD 0x9A600000, 0x14000000, 1 ; MAINSTONEII: nCS5: eXpansion board header.
DCD 0x9A700000, 0x10000000, 1 ; MAINSTONEII: nCS4: SMSC 91C111 Ethernet controller.
DCD 0x9A800000, 0x0A000000, 1 ; MAINSTONEII: nCS2 (upper half): 2MB SRAM.
的定义。
我这个是粘的mianstone的,2c0对应的905
dahua
2010-06-04
打赏
举报
回复
能说的详细点么,哪个文件,大概怎么算?
这块我比较陌生,拜托了
seu_dust
2010-06-04
打赏
举报
回复
看内存映射表,算一下就知道了,名字记不太清了,map什么的文件。
dahua
2010-06-04
打赏
举报
回复
这两个函数的帮助看了很多遍了
不是函数不会用,是不知道应该映射到什么物理地址
主板是Arm的,寄存器应该采用的是内存映射方式
那到底映射到哪块内存了?怎么算的?
InsaneCode
2010-06-04
打赏
举报
回复
去MSDN上查这两个函数。
dahua
2010-06-04
打赏
举报
回复
上面几位大侠,帮人帮到底,再来指点一番吧
hizw10
2010-06-04
打赏
举报
回复
学习中。。。。
dahua
2010-06-04
打赏
举报
回复
大侠们这样指点了我一圈还是有点不清楚,再仔细描述下我的问题
主板是周立功的epc8000,ARM体系,有一个ISA槽,系统是WinCE5.0
我老师做了一个板子,插在ISA口,板子的IO范围是 0x2C0 -- 0x2C7
我现在想在用户层读写这个板子的IO,目前的想法是用VirtualCopy函数映射到某个物理内存地址进行操作
现在想知道物理内存地址应该是多少?如何找出来?
seu_dust大侠告诉我找inc文件,可是找哪个inc文件?
inc文件是跟着板子走的吗?我老师自己做的板子没有这个啊
还有如果找到这个映射表了,我是不是可以直接操作那个虚拟内存地址了?还用自己VirtualCopy吗?
Linux系统编程第3期:文件
IO
缓存与内存映射
本课程是《嵌入式工程师自我修养》自学教程第 3 步:Linux系统编程第03期。 主要分析Linux文件I/O缓存机制:包括页缓存、用户空间的I/O缓存、内存映射机制等。
IO
端口和
IO
内存的区分及联系,两者如何区分就涉及到硬件知识
IO
端口和
IO
内存的区分及联系这两者如何区分就涉及到硬件知识,X86体系中,具有两个
地址
空间:
IO
空间和内存空间,而RISC指令系统的CPU(如ARM、PowerPC等)通常只实现一个物理
地址
空间,即内存空间。内存空间:内存...
pcie内存
地址
空间/配置
地址
空间/
io
地址
空间分析
PCIe的内存
地址
空间、I/O
地址
空间和配置
地址
空间 pci设备与其它接口的设备(如i2c设备)最大的不同是存在内存
地址
空间和配置
地址
空间,本文分析一下它们的用途。 首先区分一下
IO
空间和内存空间 cpu会访问的设备一般...
地址
映射及
IO
内存访问
我们必须得到0xE000A000这个物理
地址
在Linux 系统里面
对应
的虚拟
地址
,这里就涉及到了
物理内存
和虚拟内存之间的转换,需要用到两个函数:
io
remap和
io
unmap。对于32位的处理器来说,虚拟
地址
范围
是2^32=4GB,例如CPU...
1.微型计算机技术之
IO
地址
空间、内存
地址
空间
对于主板上CPU,其管理(读、写)的资源包括(不是主要包括): 1)内部寄存器;...CPU通过
地址
线、数据线、控制线连接RAM(内存),通过发送特定
地址
可以实现直接对内存的读写操作,那CPU可以对多少个存储单元进
嵌入开发(WinCE)
19,502
社区成员
41,568
社区内容
发帖
与我相关
我的任务
嵌入开发(WinCE)
硬件/嵌入开发 嵌入开发(WinCE)
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章