Arduino:digitalread() 和 digitalwrite() 的更快替代方案?

电器工程 表现 Arduino
2022-02-02 16:35:22

调用 Arduino 函数的最快替代方法是digitalread()什么digitalwrite()AVR 特定或芯片特定的解决方案是可以接受的。

4个回答

直接访问数字端口!

我测试的 3 种方法是

  • 数字写入(引脚,低);数字写入(引脚,高);
  • CLR(PORTB, 0) ; 设置(端口B,0);
  • PORTB |= _BV(0); PORTB &= ~(_BV(0));

[...]

在此处输入图像描述

如您所见,digitalWrite 大约需要 56 个周期才能完成,而直接端口寻址需要 2 个周期。对于具有大量 IO 操作的程序来说,这是一个很大的时间差异!

这个库是一个不错的选择: http ://code.google.com/p/digitalwritefast/

如上所述,直接访问数字端口。但有风格!

通过将硬编码值直接写入硬件寄存器,您会失去可读性和可移植性。

我在 Github 上发布了一个名为 HWA 的工具,它允许您使用面向对象的硬件接口,不需要 C++ 编译器并生成高效的二进制代码。

HWA 在那里:https ://github.com/duparq/hwa

Arduino.SE的人们已经对此进行了讨论和测试。事实证明,digitalWriteFast()与常规相比并没有太大的改进digitalWrite()然而,直接端口访问比digitalWrite().