【发布时间】:2021-04-08 10:51:57
【问题描述】:
【问题讨论】:
-
有一个端口配置寄存器。一旦您配置了哪些引脚是输入和哪些是输出,您可以写入端口,输出引脚将响应您写入的值。
【问题讨论】:
这样的 C 程序应该可以工作:
#include <avr/io.h>
void main() {
DDRG |= (1 << 1);
while (true) {
if (PING & (1 << 0)) {
// Button is pressed so drive PG1 high.
PORTG |= (1 << 1);
}
else {
PORTG &= ~(1 << 1);
}
}
}
我们可以使用Godbolt.org 将该程序转换为程序集:
main:
lds r24,100
ori r24,lo8(2)
sts 100,r24
.L2:
lds r24,99
sbrs r24,0
rjmp .L3
lds r24,101
ori r24,lo8(2)
rjmp .L5
.L3:
lds r24,101
andi r24,lo8(-3)
.L5:
sts 101,r24
rjmp .L2
(由于 99 和 101 之类的任意数字,这不是一个很好看的汇编程序,但您可能可以找出这些数字所指的寄存器并将这些数字替换为寄存器名称。您还想重命名标签。)
【讨论】:
avr-gcc 或avr-g++ 将C/C++ 转换为汇编。这是那些编译器做的主要事情! Godbolt.org 只是为此提供了一个很好的界面。