2020年7月28日火曜日

[NORTiv4] タスク生成されない

こんにちは


ソフトな道を今日もほのぼのと歩きます。


現在、現行機に変わる後継機を作成しています。


OSはNORTi V4を使用しています。


追加でタスク生成を行おうとしていましたがどうもタスク生成されても動作していないようでした。


他のタスク生成を参考にしても動作していないようでした。


(printf()で埋め込んでも表示されませんでした。)


調べたところ、以下のような指針で進めれば、比較的早く解決できそうです。


1.複数タスク生成しているなら少なくしてみる。

    → 私の場合は20タスクありましたので、2タスクだけcre_tsk()、sta_tsk()するようにしました。


2.メモリ関連の定義(私のケースでは「スタック領域先頭番地」の定義)を

    既存で動作していたものにしてみる。


これによってタスク生成されることを確認出来たら、


全体を戻して、必要分だけ入れ込めば動作するようになります。


[今日のひとこと]

「から揚げの天才」というお店が近場に出来ました。


そこに、テリー伊藤さんが宣伝の為に来ていました。


かなりの人だかりでしたが、


皆さん、密なのを感じていたようで、静かでした。


素晴らしいですね。

2020年7月25日土曜日

[実機到着前] 評価ボードにて行うこと

こんにちは


ソフトな道を今日もほのぼのと歩きます。


今日は、本番用のハードウェアボードが手元になく、

評価ボードだけあった際、何をどうしていけばよいのか分からずに途方にくれないように

する為にメモします。


1. 全体の処理を作成する。

   ハードに影響しない箇所のコーディングを行います。


2. ハードウェア制御実施した結果は正常終了のものをダミーで返す。

   ハードウェアへの制御は動いている風に記載する。

   ハードウェアへのアクセス関数を呼び出すが、中身の制御部分は空で、呼び出し元に返す値を正常終了用に作り出す。(スタブのようなもの)


3. ハードウェア制御は”1””2”とは独立して開通、制御できるところまでを行う。


4. gitにてバージョン管理する際は、1機能入れたらコミットしていくようにする。


[今日のひとこと]

世間は7/23(木)、7/24(金)はお休みですが、

私の所属する会社は営業しています。

祝日はほぼ無しなので、

案件を発注する側はその分早く成果物が出来るので

出しやすいのかもしれません

2020年7月18日土曜日

[Linux] SIGINTによってメモリ破壊をしていた箇所は意外にも3

こんにちは


ソフトな道を今日もほのぼのと歩きます。


今日は、前回「[Linux] スレッド内で使用していたメモリがSIGINTによって壊されていた為でした。」


で進展がありましたので以下記載します。


結論からいうと、


1.SIGINT処理ではprintf()は行ってはいけない

2. SIGINT処理で使用する変数型を変える

        [変更前]

            static int 型

        [変更後]

            #include <signal.h>

           

            static volatile sig_atomic_t 型

3.ポインタで渡ってくるデータはローカル変数にコピーして使う。


です。


Segmentation fault


のエラーが3日目に発生していました。


調べたところ、SIGINT内にポインタで渡ってきたデータを


そのまま音声関連の関数の引数に渡していました。


SIGINTの関数を呼び出している上位のブラックボックスの処理で


何をしているかもわからない状況なので、


書き換わる可能性がありそうでした。

(上位側のプログラムでSIGINTの関数が別スレッドとして呼ばれていた場合は

私の知らないところでメモリが書き換わる可能性がある)


ですので、データをローカルな構造体に入れて、(メモリ確保している状態で)


上記の音声関連の関数に入れるようにしました。


今回、”3”を実装して連続運転を行しはじめました。


[今日のひとこと]

JAVAプログラミング能力認定試験 というものに興味が出てきました。


というのも、Android Studioにてアプリを仕事で作ったりしていたのですが、

(Kotlin言語です。)

そもそも、お作法が体系だって習っていないことに気付いた為です。


基本から実践へという流れではなく、


実践から基本にという流れですが、おさらいも含めて資格取得してみます。


3級、2級、1級とあるみたいですが、まずは3級からでしょうか。



2020年7月9日木曜日

[Linux] SIGINTによってメモリ破壊をしていた箇所は意外にも2

こんにちは


ソフトな道を急ぎ足で今日は歩きます。


今日は、前回「[Linux] スレッド内で使用していたメモリがSIGINTによって壊されていた為でした。」


で進展がありましたので以下記載します。


結論からいうと、


1.SIGINT処理ではprintf()は行ってはいけない

2. SIGINT処理で使用する変数型を変える

        [変更前]

            static int 型

        [変更後]

            #include <signal.h>

           

            static volatile sig_atomic_t 型


こちらは、以下のリンクが大変参考になりました。

https://codezine.jp/article/detail/4700


”1”を実装して連続運転を行っていますが、20時間で


Segmentation fault


のエラーが発生していました。


今回、”2”を実装して連続運転を行っていますが、24時間

動作し続けています。(継続中)


この対応は排他制御の強力版のように思います。


動いてくれることを期待!!


[今日のひとこと]


オリエンタルラジオ 中田さんの

youtube大学でチャップリンとヒトラ(大野 裕之 (著))

を拝聴しました。

 いつもながら分かりやすい授業で

思わず書籍を読んでみました。

当時と今の情勢を見比べてみると、当時のドイツと中国が同じ状態で

占領されたフランスが今回の香港のような気がしました。

今後も、喜劇でヒトラに相当するギャグを行えば

同じように終わるのではないかと思います。


髪はポマードで「がちがち固め」で、目は線でお願いします。



2020年7月6日月曜日

[Linux] SIGINTによってメモリ破壊をしていた箇所は意外にも

こんにちは


ソフトな道をほのぼのと今日も歩きます。


今日は、前回「[Linux] スレッド内で使用していたメモリがSIGINTによって壊されていた為でした。」


で進展がありましたので以下記載します。


結論からいうと、


SIGINT処理ではprintf()は行ってはいけない。。。

です。


こちらは、以下のリンクが大変参考になりました。

https://codezine.jp/article/detail/4700


連続運転を行っていますが、1分で

Segmentation fault


のエラーが発生していたのが、1時間動作しています。

(継続中)


[今日のひとこと]


東京都知事選で、小池百合子さんが当選しました。


他の候補者とは雲泥の差でした。


強かった。


ただ、個人的にもう一つの競り合いが気になりました。


桜井さんの方が立花さんよりも票を取っていたことです。

(皆さんきちんと見てるのですね。)


2020年7月3日金曜日

[Linux] スレッド内で使用していたメモリがSIGINTによって壊されていた為でした

こんにちは


ソフトな道をほのぼのと今日も歩きます。


今日は、前回「[Linux] Watchdog タイマリスタートのタイミングによってアプリハング」


で進展がありましたので以下記載します。


結論からいうと、


スレッド内で一時的に使用する配列や変数はstaticをつけて

メモリを保護しましょう。


です。


期待していた動作と実際の動作は以下でした。


[期待していた動作]  

    1. main 処理 ループ

    2. gpio処理のスレッド発生

    3. gpio処理のスレッド開始

        char open_path[100];

        …

        sprintf(open_path, "/sys/class/gpio/gpio%d/value", 111);

    4. SIGINT 発生

    5. SIGINT処理 開始

    6. SIGINT処理 終了

    7. gpio処理のスレッド続き

        *fd = open(open_path, O_RDONLY| O_CLOEXEC);

        …

    8. gpio処理のスレッド終了

    9. main処理 ループ


[実際の動作]

    1. main 処理 ループ

    2. gpio処理のスレッド発生

    3. gpio処理のスレッド開始

        char open_path[100];

        …

        sprintf(open_path, "/sys/class/gpio/gpio%d/value", 111);

    4. SIGINT 発生

    5. SIGINT処理 開始

    6. SIGINT処理 終了

    7. gpio処理のスレッド続き

        *fd = open(open_path, O_RDONLY| O_CLOEXEC);

        open_pathが壊れている為ハング!!


期待した動作にするには

メモリを確保しておくと良さそうです。


    3. gpio処理のスレッド開始

        static char open_path[100];

        …

        sprintf(open_path, "/sys/class/gpio/gpio%d/value", 111);

    7. gpio処理のスレッド続き

        *fd = open(open_path, O_RDONLY| O_CLOEXEC);

        open_pathは保護されるので別プロセスで変更されることはありません!!



2020年7月2日木曜日

[Linux] Watchdog タイマリスタートのタイミングによってアプリハング

こんにちは


ソフトな道をほのぼのと今日も歩きます。


今日はWatchdog タイマリスタートをプログラムの中に入れて


連続運転させていると、アプリがタイミングによってハングしてしまう。


といった現象になっていました。


音声待ちの処理を行っている時に


rtc= write(fd, " ", 1);


のような処理をループ実行していると


watchdog watchdog0: watchdog did not stop!

Segmentation fault


といったエラーが発生して、アプリがハングします。


その後60秒経過後にwatchdogタイマが実施されて


再起動になります。


以下が気になった記事です。

https://quickview.cloudapps.cisco.com/quickview/bug/CSCub79985


シグナルを定義して並行的に動作させている箇所があるので


それがもしかしたら問題なのかもしれません。


対策は以下の方法で行いました。


1. 問題の箇所に対してwatchdog disableを行う。

    write(fd, "V", 1);    // Watchdogタイマディセーブル

   

    問題の処理

    …

    rtc= write(fd, " ", 1); // Watchdogタイマリスタート

   

-----------------------------------------------


[今日のひとこと]


香港国家安全維持法が7/1に施行されたようです。


第38条が特に世界が問題視しているようで、


中国が他国に戦争を仕掛けてもあんたの国は文句を言うな。


と、とらえることができると思うのですがどうなんでしょうか。


オリンピック前に、第3次世界大戦開幕ですか。