2

哪里可以查到Android Things like that下树莓派3的GPIO口切换速度的特点?

4

4 回答 4

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,不足以编写与大多数不支持的“开箱即用”协议接口的驱动程序。

于 2017-02-16T19:00:05.593 回答
2

这是 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 中提供了指令。

于 2017-02-04T04:41:59.433 回答
1

我让这个 java 代码在 0.633 秒内运行,大约相当于 1500 Hz。

for (int i = 0 ; i < 1000 ; i++) {
     buzzer.setValue(true);
     buzzer.setValue(false);
}

不过似乎有一些优化,因为如果你多次运行它,它偶尔会更快。

不过,我很想看到使用 C/C++ 的结果。

于 2017-01-19T05:25:33.490 回答
0

我们已经为 Rpi.GPIO 和 PIGPIO python 库运行了相关的基准测试。

我们得出的结论是,这两个库在高达 5 KHz 的频率下表现良好,准确度高于 99%。Rpi.GPIO 库的精度在 5 KHz 时会下降,在 50 KHz 时无法执行此任务。

PIGPIO 库的性能相对较好,对于高达 20 KHz 的频率,其准确度超过 99%。高于该频率,它的性能会逐渐下降,在 110 KHz 时它根本无法正确读取任何短语。

您可以在我们的博客上阅读有关测试的更多信息,包括所有必需的信息以便复制它

于 2021-01-27T14:58:10.170 回答