【问题标题】:Trouble speeding up arduino加速arduino的麻烦
【发布时间】: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)
  • 很难说没有看到portOutputRegisterdigitalPinToBitMask代码
  • portOutRegister 的结果与您的预期值进行比较:atmega328 (uno/nano) 上的 Arduino Pin 8 为 PORTB

标签: pointers arduino


【解决方案1】:

Arduino,如果它的 Model = Uno,那么它就是 ATmega-328 AVR,这是解决关键时序问题并实现更好的执行时间和代码优化的最佳方法,您应该通过直接修改寄存器进行编程。话虽如此,请使用 AVR-GCC,包含然后进行一些操作。您的代码不可读且难以理解。 IMO,您应该在 Arduino IDE 中用 C++ 编写 >> 较慢但更简单的选项,或者 在 IDE inC 和直接 AVR 之外开始编程,>> 数量级的性能提升。了解 AVR 怪胎论坛。

【讨论】:

    猜你喜欢
    • 2016-11-04
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多