名称 |
ソフトトラブルシューティング集 |
番号 |
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のトラブルシューティングに記載
沼津工業高等専門学校 電子制御工学科