调用 Arduino 函数的最快替代方法是digitalread()什么digitalwrite()?AVR 特定或芯片特定的解决方案是可以接受的。
Arduino:digitalread() 和 digitalwrite() 的更快替代方案?
电器工程
表现
Arduino
2022-02-02 16:35:22
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().
