Pointers 加速arduino的麻烦
我正试图通过直接写入寄存器来加速我的Arduino代码。我写了一个简短的测试脚本,但似乎没有什么作用。如果我使用“digitalWrite()”函数,我可以在示波器上看到输出,但使用此代码它只会保持0。 我用它作为参考。我不太明白我错过了什么Pointers 加速arduino的麻烦,pointers,arduino,Pointers,Arduino,我正试图通过直接写入寄存器来加速我的Arduino代码。我写了一个简短的测试脚本,但似乎没有什么作用。如果我使用“digitalWrite()”函数,我可以在示波器上看到输出,但使用此代码它只会保持0。 我用它作为参考。我不太明白我错过了什么 byte *outputRegister; byte bitMask; void setup() { pinMode(8,OUTPUT); outputRegister = portOutputRegister(8); bitMask = d
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
函数返回一个位掩码(对于相应端口上的第一个pin,类似于0b0000001)。
通过进一步的测试,我得出结论,digitalWrite函数似乎并没有改变这些寄存器中的值,这只会让我感到困惑。Arduino,如果它的型号=Uno,那么它就是ATmega-328 AVR,解决关键计时问题并实现更好的执行时间和代码优化的最佳方法应该是通过直接修改寄存器进行编程。也就是说,使用AVR-GCC,包括,然后进行位旋转。您的代码不可读且难以理解。 IMO你应该用C++写在ARDUINO IDE > >更慢但更容易的选项,或者
在IDE inC外部开始编程,直接使用AVR,>>数量级性能提升。了解AVR怪物论坛 Arduino,如果它的型号=Uno,那么它就是ATmega-328 AVR,这是解决关键计时问题并实现更好的执行时间和代码优化的最佳方法,您应该通过直接修改寄存器进行编程。也就是说,使用AVR-GCC,包括,然后进行位旋转。您的代码不可读且难以理解。 IMO你应该用C++写在ARDUINO IDE > >更慢但更容易的选项,或者
在IDE inC外部开始编程,直接使用AVR,>>数量级性能提升。了解AVR怪物论坛 延迟(1)?尝试延迟(1000)很难说没有看到
portOutputRegister
和digitalPinToBitMask
codecompare将portOutRegister
的结果延迟到您的期望值:atmega328(uno/nano)上的Arduino引脚8是PORTB
延迟(1)?尝试延迟(1000)很难说没有看到portOutputRegister
和digitalPinToBitMask
codecompare将portOutRegister
的结果传输到您的期望值:atmega328(uno/nano)上的Arduino引脚8是PORTB