ラズベリーパイのGPIO応答速度を測定(C言語編)
前回、PythonでGPIO応答速度測定をしましたが、C言語でもやってみました。
C言語ではWiring Piライブラリーなどを使うようです。
Wiring Piは以下のようにインストールします。
1 |
pi@raspberrypi:~$ sudo apt-get install wiringpi |
コードは前回のPythonコードに準じて、以下のようにしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#include <wiringPi.h> #define SW_IN 1 #define SW_OUT 0 #define LOOP_END_IN 4 int main(void) { wiringPiSetup(); pullUpDnControl(SW_IN, 2); // pullup activate pinMode(SW_IN, INPUT); pinMode(SW_OUT, OUTPUT); pullUpDnControl(LOOP_END_IN, 2); // pullup activate pinMode(LOOP_END_IN, INPUT); for(;;) { if(digitalRead(SW_IN) == 0) { digitalWrite(SW_OUT, 0); } else { digitalWrite(SW_OUT, 1); } if(digitalRead(LOOP_END_IN) == 0) { break; } } } |
ピンの名前を少し変えています。あとピン番号はPythonのときはBCMピン番号でしたが、Wiring Piは独自のピン番号のようです。
Wiring PiのWeb Siteで作者の主張を少し読みましたがよくわかりませんでした。が、作者のお気に召すままに、ということでWiring Pi独自ピン番号に合わせています。具体的には”gpio readall”でピンアサインがわかります。
swIn(今回はSW_IN)は18ピン→1ピン、ledOut(今回はSW_OUT)は17ピン→0ピン、ledOnOffIn(今回はLOOP_END_IN)は23ピン→4ピンになります。
Nucleoのプログラムや配線は前回と同じです。
Wiring PiのWeb Siteにかかれているようにcompile & runします。
1 2 |
pi@raspberrypi:~ $ gcc -Wall -o iotest iotest.c -lwiringPi sudo ./ioitest |
あと前回のNucleo用反応速度測定プロジェクトのインプットキャプチャー割り込み処理に以下の3行を足して測定回数と平均値を取るようにしました。
1 2 3 4 |
responseTime = (double)(endTime - startTime) / 84; responseTimeSum += responseTime; measureCount++; responseTimeAvg = responseTimeSum / measureCount; |
そして前回と同じように青ボタンを押して反応時間をSTM32CubeIDE Debuggerで測定してみると何と約0.42usでした。
1usを切るくらいだと本当にマイコン的に使えそうですね。
終わり