2021年10月5日火曜日

Androidアプリでのタイミング調査

 Androidアプリを開発する際、タイミングが気になるときありませんか?
このAPIは本当に10mS周期で呼ばれているのだろうか・・など。

マイコンなら空いたIOポートにHIGH/LOW出力を組み込み、オシロスコープで確認すれば簡単。ではAndroidでは ・・ ???


Raspberry PI4でAndroid11が動くというOmniROMの存在を知りました。

このような方たちが試してくれています。

 https://paiza.hatenablog.com/entry/2020/11/25/150000


ラズパイ上でAndroidが動くなら、ラズパイ上のGPIOが使えるじゃないか!
でもAndroidアプリ(Java)でラズパイのGPIOを動かせるのか??

私はCでGPIO制御を作り、JNIを使ってJavaから呼び出すことで、JavaアプリでAPI呼び出しタイミングをオシロスコープで確認することに成功しました。

以下のコードをAndroidプロジェクト内のJNIに追加します。

(JavaからのJNI呼び出しは各自設定してください)。


またAndroidのJavaプログラムから下記関数をJNI経由で呼び出すことで、ラズパイのGPIOが動くのです。
Androidアプリを構築される方はオシロを使ってタイミングを確認したりしないのかな?

ミリ秒周期の動作確認する場合、GPIO端子をHigh/Low切り替えてオシロで見るほうが確実ですよ(こんなことしたいなんて思ったことないですか??)。


※ gpiod.hは libgpiodのものを呼び出します。

// ======================================
//          GPIO
// ======================================
#include "gpiod.h"
const char *chipname = "gpiochip0";
struct gpiod_chip *chip;
struct gpiod_line *line20;
struct gpiod_line *line21;
void    OpenGpio( void )
{
    // open GPIO chip
    chip = gpiod_chip_open_by_name(chipname);

    // open GPIO Lines
    line20 = gpiod_chip_get_line( chip, 20 );
    line21 = gpiod_chip_get_line( chip, 21 );

    // Open GPIO Lines for Output
    gpiod_line_request_output(line20, "example1", 0 );
    gpiod_line_request_output(line21, "example1", 0 );
}
int     gpioOut20Dat = 0;
void    SetGpio20( int val )
{
    gpioOut20Dat = val;
    gpiod_line_set_value( line20, gpioOut20Dat );
}


 

0 件のコメント:

コメントを投稿