【发布时间】:2018-12-21 01:48:54
【问题描述】:
我正在尝试熟悉 AVR 微控制器。我对内存映射寄存器的实际功能有点困惑。
我正在使用 avr-libc 并在 C 中编程。查看 avr-libc 源代码,有许多内部寄存器可以通过写入/读取 SRAM 位置来访问。当我写入寄存器的内存位置时,SRAM 中的那个字节真的会被覆盖,然后异步复制到寄存器中吗?
谢谢!
【问题讨论】:
-
有些邮寄地址是公寓,有些是建筑物,有些是邮政信箱。如果您注意到许多街道上的门牌号码将被跳过,偶数边将按 4s 而不是 2s 步进。地址空间的一小部分是 sram,一部分是闪存,一部分是外围控制寄存器。和一些百分比那里什么都没有。与 x86 发生的事情有历史原因不同,正常的内存空间设计不会让这些事情发生冲突。
-
对于外围设备,当您写入控制寄存器时,您正在与像这样的 MCU 上的控制寄存器通信,那里也没有 SRAM 位置。现在,一些外围设备的控制寄存器可能碰巧用该逻辑使用的一个非常小的 sram 来实现。否则它们是用触发器实现的,或者根本没有存储空间。取决于外设和控制寄存器。
-
不幸的是,对于第一次尝试理解这一点的系统来说,avr 与 x86 一样糟糕,因为存在不同的地址空间和寻址模式或具有重叠地址的访问模式。但只要把它想象成 123 大街和 123 大街。而不是 456 main street 是 sram 而 789 main street 是 uart control register。
-
不要将硬件寄存器视为内存,将读取或写入此类寄存器视为对硬件的函数调用。
标签: microcontroller avr