名称 ソフトトラブルシューティング集
番号 MIRS1201-SOFT-0004

最終更新・2013.1.25

版数 最終更新日 作成 承認 改訂記事
A01 2013.1.25 鈴木雄太,戸本佳佑,平栁匠大 出川教員 初版

目次




1.目的

本ドキュメントは、MIRS1201ソフト開発時に発生したトラブル、その原因・対処方法をまとめたものである。来年度以降、同様のトラブルが発生した際のスムーズな問題解決への寄与を目的とする。

2.トラブル内容

  • プログラム起動中にフリーズ
  • アボート①
  • アボート②
  • 超音波の値が指定した変数に格納されない(uss_get()の代入先が正しくない)
  • 超音波センサの取得値が正し送信されない(uss_get()で正確な値をとれない)
  • 3.原因・解決方法

  • <問題>プログラム起動中にフリーズ
    <原因>スレッドの数が多すぎた。CPUがシングルコアだったため、処理落ちしたと思われる。
    <解決>encoderスレッドとmainスレッドを統合し,ussのスレッドを4つから1つに統合した。

  • <問題>アボート①
    <原因>コメントアウトによりuss_get()内の配列への数値代入に原因があることが判明
    <解決>fprintfを用いた代入から、通常の代入方式に変えたことにより解決された。

  • <問題>アボート②
    <原因>各スレッド内で無限ループを行っているのに対し,main関数内でthread_joinを行ったため、そこに不具合が生じアボートが起こった。
    <解決>thread_joinによる待ち合わせ方式から、変数による条件分岐での待ち合わせ方式に変更した

  • <問題>uss_get()の代入先が正しくない
    <原因>バッファにデータが残ったままプログラム終了させたのが原因かと思われる。
    <解決>プログラム終了時にデバイスをクローズし、確実に終了させるように改良した。

  • <問題>uss_get()で正確な値をとれない
    <原因>新規設計したussのドライバと既存uss_get間における型違い、送信byte数の違いが原因だと思われる。
    <解決>ussのトラブルシューティングに記載



  • 沼津工業高等専門学校 電子制御工学科