C语言中变量的地址分配

因为每一个外设都是通过总线(内部总线+外部总线)与处理器建立联系,每个外设在内存中都用规定的地址,处理器通过地址,即可与外设取的联系。

同时外设有自己寄存器(控制寄存器+状态寄存器+数据寄存器),也叫“I/O端口”,其寄存器也有地址,在使用外设之前,必须对外设寄存器进行相关配置,这是寄存器开发。

CPU对外设IO端口物理地址的编址方式 有两种:
一种是I/O映射方式(I/Omapped)称为端口映射。(X86)
     这是一个与CPU地RAM物理地址空间不同的地址空间,所有外设的I/O端口均在这一空间中进行编址。CPU通过设立专 门的I/O指令(如X86的IN和OUT指令)来访问这一空间中的地址单元(也即I/O端口)。这就是所谓的"I/O映射方式"(I/O-mapped),也就是“独立编址”。

另一种是存储空间映射方式(Memorymapped),称为内存映射。ARM体系的CPU均采用这一模式
      有些体系结构的CPU(如,PowerPC、m68k等)通常只实现一个物理地址空间(RAM)。在这种情况下,外设I/O端口的物理地址就被映射到 CPU的单一物理地址空间中,而成为内存的一部分,也就是所谓的“统一编址”,这样,CPU就可以像访问一个内存单元那样访问外设I/O端口(理解为I/O寄存器),而不需要设立专门的外设I/O指令。(统一编址

而具体采用哪一种则取决于CPU的体系结构。

现在流行的一种开发方式是库函数开发,因为寄存器的数量多,功能复杂,直接去配置必须对寄存器每个位的功能了解。所以将寄存器的使用直接封装成可以调用的函数,并提供相应的参数,在以后采用库函数开发时,不需要去查阅数据手册中的寄存器说明,直接调用相应的库函数即可。
CPU与外设交流的方式有两种:轮询和终端,前者为主动,后者为被动。


  存储器顺序:寄存器→Cache→内存→外存

1、在C语言中,定义一个变量时,地址是如何分配的?









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云上笛暮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值