哪里可以查到Android Things like that下树莓派3的GPIO口切换速度的特点?
4 回答
在DP2中有两种方式来控制 GPIO:
1) 使用 java 的 SDK(由 Harry Fairhead 分析);
2) 使用 C/C++ 使用 NDK(由 Harry Fairhead 分析)。
使用使用 java 的 SDK,看到的最快脉冲约为 0.23 毫秒,并且脉冲序列中有很多大的(长达 8 毫秒)中断(!!!)。使用 C/C++ 的 NDK,脉冲宽度从 0.23ms 减少到大约 0.15ms。
结论: Android Things DP2 Raspberry Pi GPIO 最大频率约为 3 kHz,不足以编写与大多数不支持的“开箱即用”协议接口的驱动程序。
这是 C 的结果:它接近 100kHz。
由于我没有这些措施的范围或适当的设备,这就是我所做的:
一种测量时间并调用对大量周期有效的 C 方法的 java 方法。这只是为了简单起见,我相信这足以表明对于大量周期,速度渐近达到近 100kHz:
1 Iterations done in 501.38547 ms = 0.0019944734 kHz
10000 Iterations done in 599.4385 ms = 16.68228 kHz
100000 Iterations done in 1496.2832 ms = 66.83227 kHz
1000000 Iterations done in 10275.258 ms = 97.32116 kHz
2000000 Iterations done in 20104.879 ms = 99.47834 kHz
C 代码必须做的其他事情是等待 500 毫秒,直到正确配置引脚。
用于此测量的所有代码都可以在https://github.com/fmatosqg/androidthings_ndk/tree/SO_speed_measurement获得,我相信速度仍有提升的空间。尽管它使用 hack 从 C 代码编写,但 README.md 中提供了指令。
我让这个 java 代码在 0.633 秒内运行,大约相当于 1500 Hz。
for (int i = 0 ; i < 1000 ; i++) {
buzzer.setValue(true);
buzzer.setValue(false);
}
不过似乎有一些优化,因为如果你多次运行它,它偶尔会更快。
不过,我很想看到使用 C/C++ 的结果。
我们已经为 Rpi.GPIO 和 PIGPIO python 库运行了相关的基准测试。
我们得出的结论是,这两个库在高达 5 KHz 的频率下表现良好,准确度高于 99%。Rpi.GPIO 库的精度在 5 KHz 时会下降,在 50 KHz 时无法执行此任务。
PIGPIO 库的性能相对较好,对于高达 20 KHz 的频率,其准确度超过 99%。高于该频率,它的性能会逐渐下降,在 110 KHz 时它根本无法正确读取任何短语。
您可以在我们的博客上阅读有关测试的更多信息,包括所有必需的信息以便复制它