Armadilloフォーラム

ArmadilloG3Lにて、RS485通信ラインに、データを100msごとに送信すると、LinuxOSが再起動する。

g-shinya

2022年5月19日 16時16分

ArmadilloG3LのRS485通信について質問です。

armadilloの状態は下記フォーラム(at16のほう)と同様です。
https://armadillo.atmark-techno.com/forum/armadillo/11827

テストプログラムtest.pyにて、ArmadilloG3Lにデータを100msごとに送信すると、LinuxOSが再起動してしまいます。
こちらはノイズなどの対策用で働いているものでしょうか?
それともバグでしょうか?
テストプログラムと、再起動前に表示されたコンソールの内容、を添付いたします。

ご確認のほどよろしくお願いいたします。

ファイル ファイルの説明
test.py_.txt
再起動前のコンソール上ログ.txt
コメント

アットマークテクノの古賀です。

g-shinyaさん:
>ArmadilloG3LのRS485通信について質問です。
>
>armadilloの状態は下記フォーラム(at16のほう)と同様です。
>https://armadillo.atmark-techno.com/forum/armadillo/11827
>
>テストプログラムtest.pyにて、ArmadilloG3Lにデータを100msごとに送信すると、LinuxOSが再起動してしまいます。
>こちらはノイズなどの対策用で働いているものでしょうか?
>それともバグでしょうか?
>テストプログラムと、再起動前に表示されたコンソールの内容、を添付いたします。

ログを見ると、カーネル内部で想定していない例外が起き、その結果カーネルパニックして再起動しているようです。
例外が起きているのは、受信割り込みハンドラのように思われますが、詳細は不明です。

なお、test.py を拝見すると、main() にあるループ中で time.sleep(0.01) による待ち動作を行っており、0.01 秒、つまり 10[msec] の待ち動作となっています。とすると、「データを100msごとに送信」ではなく、「データを10msごとに送信」という動作になっていると思われます(※read_test() での読み出し待ちや、その他のオーバーヘッドがありますので、実際には、もっと長い周期になると思いますが)。

    while True:
        dev.flushInput()
        write_test(snddata)
        time.sleep(0.01)
        read_test()

ためしに、time.sleep(0.01) ではなく time.sleep(0.1) にして 100ms 周期に近くした場合は、どうなるでしょうか?