【发布时间】:2019-09-17 11:47:16
【问题描述】:
我正在尝试通过直接写入寄存器来加速我的 Arduino 代码。我写了一个简短的测试脚本,但它似乎并没有做太多。如果我使用 'digitalWrite()' 函数,我可以在示波器上看到一个输出,但使用此代码它只是保持 0。 我使用this link 作为参考。我无法完全理解我错过了什么。
byte *outputRegister;
byte bitMask;
void setup() {
pinMode(8,OUTPUT);
outputRegister = portOutputRegister(8);
bitMask = digitalPinToBitMask(8);
}
void loop() {
*outputRegister |= bitMask;
delay(1);
*outputRegister &= ~bitMask;
delay(1);
}
编辑:portOutRegister 应该返回设置输出引脚的端口。 digitalPinToBitmask 函数返回一个位掩码(类似于相应端口上第一个引脚的 0b00000001)。
通过进一步的测试,我得出结论,digitalWrite 函数似乎并没有真正改变这些寄存器中的值,这只会让我感到困惑。
【问题讨论】:
-
延迟(1)?尝试延迟(1000)
-
很难说没有看到
portOutputRegister和digitalPinToBitMask代码 -
将
portOutRegister的结果与您的预期值进行比较:atmega328 (uno/nano) 上的 Arduino Pin 8 为PORTB