So-net無料ブログ作成
検索選択

bcmlib_for_javaが突然暴走して焦った [GitHUB]

(2013.10.06)
元のbcm2835 library(これです)には、親族SNS管理人が使う予定の無いライブラリ関数が数多く含まれています。

折角なので、bcmlib_for_javaは全てのライブラリ関数を呼び出せるようにしましたが、テスト対象が多くなってしまいました。使い方の判らない関数もあって、全ての関数を一つ一つ動作確認することなど出来そうもありません。orz

そこで、全てのライブラリ関数について”関数の呼び出し”だけテストすることにしました。やってみると引数が渡せないものや、返値が受け取れないものなどが見つかり、『テストして良かった!』と思いました。関数呼び出しのテストが一通り動いて、『どうやら関数の呼び出しは大丈夫だ』と安心しましたが、大きなバグが潜んでいることに気付いていませんでした。

全ライブラリ関数を呼び出すテスト・プログラムは他のサンプル・プログラムより大きなものになって行きました。

少しずつテスト関数を追加して、全ライブラリ関数を呼び出すテスト・プログラムは他のサンプル・プログラムより大きなものになって行きました。
テスト==>O.K.
同期処理を追加して==>O.K.
確認済みのテスト・コードを全部組み込んで・・・

突然、bcmlib_for_javaが暴走し始めました。
Java側のプロセスは終了した(テストを完了した)のに、ライブラリ側のプロセスが動き続けています。

『上手く動いていたのに、突然一体、何なんだ?』
最後に追加したテスト・コードを疑ったのですが、問題は見つかりません。しかし、それを戻すと最後のbcm_close関数で暴走します。

???

調べてみると、最後のbcm_close関数で引き金を引いたことが判りました。原因はリングバッファからデータを取り出す関数です。
int get_ring_buff(struct ring_buff *rb, char *buff, int max_len)
{
    int r;
    int w;
    int len;

    r = rb->rp;
    w = rb->wp;
    len = 0;
    while( r != w )
    {
      if( len >= max_len)break;
      buff[len++] = rb->buff[r++];
      r &= RING_POINTER_MASK;  <==これが抜けていた
    }
    rb->rp = r;
    return len;
}


最後のbcm_close関数でリング・バッファが一巡して、readポインタが0に戻らなければならないのところで、そのまま先に読み進めていました。

”実際にライブラリを使えば、直ぐに見つかった筈”とは言え、これは重大なバグです。それが、この時点で見つかる理由は・・・

”モジュール・テストを実施していないから”です。

モジュール・テストなんて、全くやる気がおきないんだけど・・・
やっぱり拙いかな~?
いっそ、公開するのを止めるか?
それとも”excuse”を入れて、誤魔化すか?
う~ん、どうしよう!

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


gh-pagesを作ってみた [GitHUB]

(2013.10.05)
ここの情報を頼りに、gh-pagesを作ってみました。今なら書かれている内容もすんなり理解できるのですが、最初は何が何やらまったく判らず、徒に試行錯誤を重ねることになりました。

混乱の原因は、親族SNS管理人がプロジェクト・ページとユーザ(または組織)・ページをはっきり区別せずにいたことです。ユーザ・ページは<アカウント名>/<アカウント名>.github.ioというrepositryのmasterプランチを使います。一方、プロジェクト・ページはプロジェクトのrepositoryのgh-pagesブランチを使います。(今読めばちゃんと書いてあることが判る)

紛らわしいのは、少し前(2013/04/05?)まで『http://ユーザー名.github.com/プロジェクト名』というURLだったらしい(ここに書いてあった)のです。ですから、Webで見つかる情報の多くが現状の手順と違っていて、親族SNS管理人の混乱に拍車をかける結果となりました。

今のURLはプロジェクト・ページが
http://<アカウント名>.github.io/<プロジェクト名>/
ユーザ・ページが
http://<アカウント名>.github.io/
です。

bcmlib_for_javaのrepositryから作ったプロジェクト・ページはこんな感じです。プロジェクトのmasterブランチに置いたREADME.mdファイルの内容がHTML化(自動生成した)されています。

なかなか良い出来映えです。(<==自分でデザインした訳では無い)

2013_1005.pngbcmlib_for_javaのプロジェクト・ページ
http://denshikobo-life.github.io/bcmlib_for_java/

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


bcmlib_for_javaにUART機能を追加した [GitHUB]

(2013.10.01)
”お試し”とは言え、GitHUBに登録したbcmlib_for_javaを放って置く訳にはいきません。不要なコードを削除したり、抜け落ちていたDoxygenのTAGを追加したり・・・

こういう地味な作業を続けることの大切さは理解しているつもりです。けれども、何時までメンテナンスを続けることが出来るか?そもそも、公開したプログラムのメンテナンスを続ける覚悟があるのか?

その辺りが大変怪しい。(^_^;)
当面は、テスト・プログラムの整備と、見つかった不具合の修正に努めます。

先ずはコードだけ組み込んであったUART機能をテストするため、(ここの情報を参考にして)UARTをカーネルから切り離しました。そして、固定文字列を送受するJavaプログラムを動かしてみました。

小さな不具合(例えばBLOCKING動作になっていたとか)は有りましたが、なんとか動きました。
さて、この後のテストはどうしようか?

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


GitHUBにデビューした [GitHUB]

(2013.09.30)
あれこれ、判らないことだらけなのですがbcmlib_for_javaをGitHUBに登録してみました。
<こちらです>
https://github.com/Denshikobo-Life/bcmlib_for_java

一部にデバッグ用のコードが残っていたりする代物を”GitHUB登録のお試し”というノリでやっちゃいました。”Experimentalバージョンとなっていますが、サンプルBlink.javaはちゃんと動きますので、宜しければお試し下さい。

2013_0930.pngbcmlib_for_java

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


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