SSブログ

JAVAでbcm2835ライブラリを動かしてみた(その2 仕切り直し) [Raspberry Pi]

(2013.08.30)
/dev/memのmmap処理を欠いたまま、bcm2835のシェアド・ライブラリをJAVAから呼び出す試みは失敗に終わりました。しかし、立ち直りの早いところが親族SNS管理人の強みです。
¥(^_^) <==懲りない奴

未だ、Raspberry piのGPIO制御を実際に試していなかったので、bcm2835ライブラリにblink.cを組み込んで、動かしてみました。

$ sudo bcm2835_blink
2013_0829_1.pngLEDが点滅している

これをユーザー・モードで起動できるように修正します。

$ sudo chown root:root bcm2835_blink
$ sudo chmod 4755 bcm2835_blink
$ ls -al bcm2835_blink
-rwsr-xr-x 1 root root 16275 8月 29 15:12 bcm2835_blink
$ bcm2835_blink

動きました。
(パチパチパチ~)

bcm2835_blinkを子プロセスから起動し、終了させるプログラム(<==bcm_interface.c)を書きました。
    child = fork();
    if( child == 0 )
    {
       argv[0]="bcm2835_blink";
       execve(argv[0], argv, environ);
       exit(0);
    }

    sleep(3);
    printf("%s\nO.K. setup complete\n",argv[0]);
    kill(child,SIGINT);
    exit(0);

さらに、共有メモリを設けて、その上で二つのリング・バッファを動かして、bcm2835_blinkとbcm_interface間で通信できるようにしました。

$ dd if=/dev/zero of=/tmp/shm bs=4096 count=1
$ bcm_interface /tmp/shm
struct ring_buff *r_buff,*w_buff;

      fd = open( argv[1], O_RDWR);
      s = mmap(0, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

---------------------------------
親プロセス(bcm_interface)
      r_buff=(struct ring_buff *)s;
      w_buff=(struct ring_buff *)(s+sizeof(struct ring_buff));
---------------------------------
子プロセス(bcm2835_blink)
      w_buff=(struct ring_buff *)s;
      r_buff=(struct ring_buff *)(s+sizeof(struct ring_buff));
---------------------------------
 r_buff->rp =0;
 w_buff->wp =0;


これで以下のことが出来るようになりました。
(1)ユーザ・モードで起動したプログラムからbcm2835ライブラリ関数を呼び出して、GPIOを制御する。
(2)そのプログラムを子プロセスとして起動する。
(3)共有メモリを設定して、二つのプロセス間で通信する。

”JAVAからbcm2835ライブラリを呼び出す”ための道具立ては揃ったように思うのですが・・・
どうでしょう?

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(1)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

nice! 1

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。