有人能解释清楚吗,什么是映射?端口映射?记忆映射?在固件开发中。
我浏览了很多其他网站,但问题还不清楚。
在对固件开发人员的采访中被问到。
实际问题是“如何使用C访问控制器寄存器/内存中的数据?”(他给出了线索,你知道内存映射I/O,端口映射I/O吗?就像这样。
我知道问题可能是这样的,
如果SPI/I2C/ADC中有这样的微控制器内存缓冲区中的数据,您如何访问这些数据?石墨半导体提出的问题。
谢谢
发布于 2015-05-27 20:55:27
对于端口映射IO,需要为接口提供额外的驱动程序。这将完全定义如何处理外部设备。它可以像GPIO一样简单,只需使用闪存或SPI驱动外部寄存器。所有这些主要是由软件定义的或由接口提供的。然而,它与CPU地址和数据总线无关。
内存映射的IO就好像寄存器是正常地址空间中的一个变量一样。但是,您需要确保编译器既不对访问进行优化,也不对访问进行重新排序(无论是对同一个变量还是对其他此类寄存器)。由于这种寄存器的地址是由硬件固定的,所以可以通过链接器(-script)设置地址,或者如下所示(地址0x1234的16位读/写寄存器):
#define REGX (*(volatile uint16_t *)0x1234)发布于 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指令(in和out在x86程序集中)写入/读取I/O设备。您不会占用内存地址空间。
发布于 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);
这让你明白了吗?
https://stackoverflow.com/questions/30473627
复制相似问题