gpt4 book ai didi

arduino - 为什么在avr中寻址DDRx、PORTx时要加Offset?

转载 作者:行者123 更新时间:2023-12-05 05:25:09 28 4
gpt4 key购买 nike

我最近开始使用 AVR 对我的 Arduino (ATmega328p) 进行编程,并获得了关于使用 avr lib 而不是 arduino IDE 的足够知识。我从一个闪烁的 LED 示例开始。

然后我尝试了相同的例子,但是这次我没有包含 io.h 或任何其他库,而是使用指向 PORT 的指针,如 DDRB 或 PORTB 等。

根据 atmega328p datasheet,DDRB 位于 0x04,PORTB 位于 0x05。

然而,将它们设置为高电平以用于我闪烁的 LED 灯(例如)不起作用。相反,在它完美运行后,我不得不向两个地址添加偏移量 0x20。即,DDRB=0x24 和 PORTB=0x25这个偏移量 (0x20) 来自哪里?

最佳答案

如果您查看 datasheet 的第 19 页上的内存映射,您会看到前 32 个字节地址是寄存器,I/O 寄存器在这些之后开始。这就是为什么您需要添加 32 (0x20) 偏移量来获取 SRAM 地址。

关于arduino - 为什么在avr中寻址DDRx、PORTx时要加Offset?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32176480/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com