- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
AVR 微 Controller 中的 X、Y 和 Z 寄存器有什么区别。他们每个人适合 C 编译器的是什么?编译器在哪里存储堆指针、堆栈指针、帧指针?该寄存器是否具有相同的功能或在不同空间(例如 EEPROM、RAM)中提供寻址。
最佳答案
X Y 和 Z 寄存器实际上是一对 r27:r26、r29:r28 和 r31:r30 寄存器。它们中的每一个都可以用作指向 SRAM 的间接指针:
ld r16, X
后递增或前递减:
ld r16, -Y
st Z+, r16
但是只有Y和Z可以用位移
ldd r16, Y + 10
std Z + 5, r16
而且只有Z可以用来间接读flash memory,不能预减或位移:
lpm r16, Z+
lpm r17, Z
因此,编译器应该如何使用它们以及应该存储哪些信息没有特定的方式。考虑到所有这些限制,它非常依赖于编译器。比如Z适合用来访问flash memory,而Y适合用来存放stack frame,因为可以位移访问。又例如,GCC 将 X 和 Z 寄存器用作“由调用者保留”,而 Y 寄存器用作“由被调用例程保留”。此约定有助于最大限度地减少压栈操作,允许调用例程将 Y 分配为指针迭代器或堆栈帧,还允许被调用例程自由使用 X 和 Z 而无需花费时间来压栈和弹出它们。但是同样,如何使用这些寄存器在很大程度上取决于编译器。没有任何东西强制它以这种或那种方式使用寄存器。
堆栈指针 始终存储在 SPH:SPL I/O 寄存器(0x3E、0x3D)中,它们由内核本身处理,同时执行调用、返回、压入和弹出。编译器不需要将其存储在其他地方。
在 AVR 中没有堆这样的东西。因此,如果编译器以某种方式实现堆内存管理,则取决于堆分配位置和方式的实现。但是对于像 AVR 这样的小型 MCU,通常根本没有存储堆的意义,因为不需要动态分配。
关于compiler-construction - AVR XYZ 寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48645379/
前言 众所周知,对于 16 位 I/O 寄存器(定时器计数器、ICR/OCR、ADC...)的原子和同时读/写高和低部分,AVR 使用影子临时寄存器。例如。在 ATmega8 上读取 TCNT1: u
我想使用 avr-gcc 将全局变量绑定(bind)到未使用的 I/O 寄存器(例如 PORTB),以减少代码大小。我在AVR的应用笔记AVR035中学到了这个技巧(第 14 页)。 在应用笔记中,他
我有一个项目,其中 ATtiny2313V 控制 7x5 LED 矩阵以显示滚动文本。为了显示文本,我构建了一个字体,它与程序的其余部分一起存储在闪存中。 整个程序,包括整个字体,占用 1106 字节
我尝试使用 this Code/Guide在 ATmega1284p 上。 我遇到的问题是链接器不工作,执行后出现以下错误消息(代码为 ATmega88 构建良好): avr-ld -o main.
我原以为 8 位 AVR 平台不需要任何对齐。但是,我在 an LLVM commit 中发现了以下评论: The previous data layout caused issues when de
我想生成一个具有可变频率和固定占空比 (50%) 的 PWM 信号。频率应在 0-25KHz 之间变化。这是用于 ATMEGA32U4 微 Controller 的,我正在使用 Atmel Studi
我想生成一个具有可变频率和固定占空比 (50%) 的 PWM 信号。频率应在 0-25KHz 之间变化。这是用于 ATMEGA32U4 微 Controller 的,我正在使用 Atmel Studi
当我尝试使用 AVR studio 4 调试一小段代码时,出现此错误: Build failed... No build tools defined. 有人能给我一些建议吗? 最佳答案 在 AVRSt
我有一个设置为 CodeVision AVR 项目的遗留代码。我想迁移到 AVR Studio 甚至更好的 NetBeans(使用 AVR 工具链或 WinAVR)。 有什么想法吗? 最佳答案 你应该
我在以 AVR 为目标的 C 中遇到毫秒延迟循环的问题。我在从 Ubuntu 存储库获得的 Linux 上使用 avr-gcc 4.7.0,我也有尝试了新编译的 4.7.2。目标硬件是 XMEGA12
如何启用或禁用 IDE 的自动完成功能 AVR-Studio 5或 AVR-Studio 4 ?我是否必须编辑一些安装文件才能做到这一点? 视频中AVR Studio 5: How to use th
我正在尝试用 Arduino Eclipse 插件替换 Arduino IDE。下载所需的一切并尝试编译最简单的“Hello World”程序后,我在 eclipse 中遇到以下错误: 调用时: wh
我继承了一个链接到一个库的应用程序,该库可能是用 gcc3 构建的。或者也许使用 imagecraft 编译器。这些信息现在已经消失在天堂般的位域中,我只剩下一个 libXXX.a 库来链接我的应用程
我正在尝试通过 USBASP 编程器将一些数据从 PC 发送到 ATmega328P 芯片。 它能够通过 SPI 传输最多 4 个字节。这 4 个字节可以在 USB Setup Packet 中设置(
我正在使用 ATMEGA128 与另一台设备进行通信。为此,我使用带有 ATMEGA128 的 SPI 作为从机。我使用 SS、SCK 和 MOSI 引脚。我面临的问题是,当我必须下载程序时,我必须断
我有以下汇编代码: __asm__ __volatile__ ( "1: subi %0, 1" "\n\t" "brne 1b" : "=d" (__count)
大家好! 我的 DIY 洒水器和鱼缸自动化的 AVR 取得了很好的进展,但我遇到了一个问题,这让我很烦恼。 哪个 if 语句在 AVR 上运行得更快?(在更少的时钟周期内)多少? if(temp_se
我见过的所有示例 AVR 程序都以如下代码开头: .org $0000 rjmp Reset ; ... Reset: ; Start of program 如果我不使用任何中
我正在使用avr-gcc 4.8.2对Atmel ATtiny13a微 Controller 进行编程。 这是我的C代码: #include #include int main(void) {
所以,我使用的是 ATMega168与 NerdKits使用两个中断 INT0 和 INT1 设置并连接一个 LCD。我想附上 Grove Heart Rate Monitor ,我已附加到 PCIN
我是一名优秀的程序员,十分优秀!