4215|7

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

内存地址映射问题,初学者,高手指教。 [复制链接]

问:
       cpu中的寄存器是以什么方式对应到编程中的一段地址的?知道有统一编址,那么硬件上是怎么实现在应用程序中通过一个地址去访问寄存器的,这个对应过程是怎样的?还有统一编址和独立编址这个内存的地址在编程是对应的有什么不同,硬件上有什么区别?

最新回复

CPU寄存器就是 R1,R2,R3 CPSR等等,C语言里是没有指令可以访问的,汇编可以,上面我不回复了么,在linux驱动里没必要访问CPU寄存器的,你想访问CPU什么寄存器呢? ram的接口肯定是直接(或间接,有时需这样做)与CPU相连,因为CPU对ram进行读写控制啊  详情 回复 发表于 2008-6-19 15:41
点赞 关注

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
CPU中的寄存器与地址没有关系,访问寄存器也不需要地址,通过数据传送指令可以把寄存器与内存中的数据进行交换。
统一编址和独立编址是指外部设备,统一编址是把外设当作内存来编址,使用访问内存的方式来访问外设;独立编址是把外设与内存分开编址,使用I/O指令来访问外设。
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
CPU中的寄存器地址与内存地址没有关系,寄存器地址是通过内部的指令访问,内存地址可以直接访问,
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

4
 
使用访问内存的方式来访问外设;独立编址是把外设与内存分开编址,使用I/O指令来访问外设。


请问使用访问内存的方式访问外设是什么样的,具体,就是在程序中。


使用I/O指令来访问外设------是否可以举个具体程序代码的例子呢?


CPU中的寄存器与地址没有关系,访问寄存器也不需要地址,通过数据传送指令可以把寄存器与内存中的数据进行交换。


-----------您说的是汇编指令吧,那在linux中驱动中去访问一个cpu的寄存器要怎么做呢?
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

5
 
建议LZ看一下微机原理方面的书,不然没法理解这些问题。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

6
 
比如我板子上 0xc0000000-0xd0000000 接的是ram
那么
(*(unsigned char *)0xc0000000)=0x55;  //这条指令就把0xc0000000 置为0x55了(一个例子)
这就是像访问内存一样访问外设的方法,当然你电路上要接好,比如WR,RD,CS这些线,还有你CPU要支持,支持的意思就是说当你CPU执行这条指令的时候,它硬件会自动时序上配合,比如WR拉低,CS拉低,地址端口输出地址,数据端口等待数据,如果你CPU不支持的话,你的端口只是普通的I/O口,执行这条指令的时候就访问不了外设
一般的ARM上的端口都是复用的,也就是说你可以选择它们是外部地址数据线还是普通端口
linux的驱动里应该是不能访问到CPU的一些寄存器的,只有汇编指令可以,或者你试试在驱动里内嵌汇编? linux里我没试过,也没必要,你要访问什么寄存器? 你的变量,堆栈,编译器编译的时候会自动给你分配寄存器来保存或者其他什么的,不需要你操心了
另外,linux内存地址映射指的是你在程序中使用的地址和实际物理地址是不一样的,内核态驱动是一个固定的偏移,用户程序就不一定了
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

7
 
比如我板子上 0xc0000000-0xd0000000 接的是ram

------------------------请问楼上大侠,这段接的是ram是怎么做的,硬件cpu的口出来,还是怎么回事,我是搞软件的,这些不大懂,希望不要笑话,麻烦您了。^_^


(*(unsigned char *)0xc0000000)=0x55;  //这条指令就把0xc0000000 置为0x55了(一个例子)


----------------------------这个只是给内存赋值呀,那我在linux驱动中要访问一个cpu的寄存器是怎么做的呢?
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

8
 
CPU寄存器就是 R1,R2,R3 CPSR等等,C语言里是没有指令可以访问的,汇编可以,上面我不回复了么,在linux驱动里没必要访问CPU寄存器的,你想访问CPU什么寄存器呢?

ram的接口肯定是直接(或间接,有时需这样做)与CPU相连,因为CPU对ram进行读写控制啊
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表