首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >端口映射,内存映射

端口映射,内存映射
EN

Stack Overflow用户
提问于 2015-05-27 05:08:26
回答 3查看 1.1K关注 0票数 2

有人能解释清楚吗,什么是映射?端口映射?记忆映射?在固件开发中。

我浏览了很多其他网站,但问题还不清楚。

在对固件开发人员的采访中被问到。

实际问题是“如何使用C访问控制器寄存器/内存中的数据?”(他给出了线索,你知道内存映射I/O,端口映射I/O吗?就像这样。

我知道问题可能是这样的,

如果SPI/I2C/ADC中有这样的微控制器内存缓冲区中的数据,您如何访问这些数据?石墨半导体提出的问题。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-27 20:55:27

对于端口映射IO,需要为接口提供额外的驱动程序。这将完全定义如何处理外部设备。它可以像GPIO一样简单,只需使用闪存或SPI驱动外部寄存器。所有这些主要是由软件定义的或由接口提供的。然而,它与CPU地址和数据总线无关。

内存映射的IO就好像寄存器是正常地址空间中的一个变量一样。但是,您需要确保编译器既不对访问进行优化,也不对访问进行重新排序(无论是对同一个变量还是对其他此类寄存器)。由于这种寄存器的地址是由硬件固定的,所以可以通过链接器(-script)设置地址,或者如下所示(地址0x1234的16位读/写寄存器):

代码语言:javascript
复制
#define REGX (*(volatile uint16_t *)0x1234)
票数 0
EN

Stack Overflow用户

发布于 2015-05-27 10:35:00

内存映射I/O允许对I/O设备进行写入/读取,就像对正常内存进行读写一样(使用相同的机器代码/asm)。使用内存映射I/O设备的物理内存地址空间。

通常在CPU和RAM之间有一些地址解码逻辑,所以当您到达属于I/O设备的内存位置时,地址解码逻辑就会启动,并将CPU地址线连接到该I/O设备(而不是RAM)。

这是一种访问I/O的简洁方法,但它占用了内存空间。

端口映射I/O允许使用特殊的asm指令(inout在x86程序集中)写入/读取I/O设备。您不会占用内存地址空间。

票数 3
EN

Stack Overflow用户

发布于 2015-07-31 04:31:20

端口映射和内存映射完全不同。端口映射是指定要使用的端口。例如,您想要用于串行通信的端口是UART1还是UART2还是USB?

内存映射IO共享IO的相同内存地址空间(相同空间,但唯一地址)。但是,内存隔离IO为内存和IO分隔了空间。

*gpio_for_led = 1;// mem映射io

gpio_for_led = 0x1234;//孤立的io(程序集代码有in,out指令)

(gpio_for_led,1);

这让你明白了吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30473627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档