【初期値不定】製品発売の2年後に重大なバグを抱えていたことが発覚した話

販売数が増える一方で順調だなあ!

発売した製品の毎月の販売数に喜ぶ日々を過ごしていました。
気づけば2年経ち、他の製品の開発を進めていたある日のこと。

品質担当

動作不良を起こすことがある、とお客様から何度か問い合わせが来ている

と、連絡が入りました。その内容と対処方法についてまとめた話です。

立プロでは組込エンジニアって実際どうなの?業界の話を聞いてみたいという方向けにメンタリングサービスを行っております。
Zoomでお話できればと思います。組み込み業界を検討している方はどうぞ。

不具合内容

製品には外部の入力信号を検出して、その結果に応じた内容をLCDに表示するプログラムを実装していました。

この製品は LCD に結果が表示されるのが特徴だったので、今回の連絡が本当なら全品回収の重欠点です。
製品は複数の入力ピンをもち、そのうちの一つがローからハイになったタイミングで、他の入力ピンの信号レベルを検出する割り込み処理が入る仕組みです。
今回はその処理がうまくいってないとのこと。
発売前には何度も評価を実施して入念に確認してきた部分だったため、聞いた時は驚きを隠せませんでした。 

動作確認と解決方法

実際何十回も電源の入り切りしたり、入力信号を変えたりすることで、 確かに動作不良を起こすことが確認できました(とってもショック...)。

ただこの動作不良には再現性がなかったので、どうやって確かめて良いのか苦労しました。
その後何度もデバッグしながらソースコードを確認したところ、 入力信号からは想定しない分岐に処理が飛んでいることがわかりました。
ということは割り込み処理が入る入力ピンのレジスタ設定がおかしいのだろうということになり、ソースコードを確認したところ、 ローからハイになったタイミングで割り込み処理を入れるという設定がされていなかったのです。
厳密にはローからハイになったタイミングで割り込み処理を入れるなら0に設定、ハイからローになったタイミングで割り込み処理を入れるなら1に設定しなければいけないところ何も明示していませんでした。
実はほとんどのレジスタは初期設定で0がセットされるのですが、今回の設定部分に関してマイコンのデータシートを確認したところ不定だったのです。

これは完全に私の設計ミスでした...。
マイコンの仕様としては何も設定しなければ設定は0であると思い込んでいたので、このような事態になりました。
そこで設定を0にすると明示したところ、動作不良は起こらなくなりました。

レジスタが不定ってどういうこと

レジスタと言っても内部はハイorローの電気信号なので設定しない限り0になりそうですが、不定になるとはどういうことかマイコンメーカーに問い合わせました。
すると、電源投入直後の外気温や電源電圧レベルによってどちらになるか分からない部分が不定と表現されるとのこと。

対処

直ちにファームウェアの更新、 有識者とソースコードレビューをし、全ての機能が問題なく動作することも試験して確認し、全営業員向けの説明文書の作成、とやることはたくさんあります。
すでに購入して使用しているお客様のファームウェアを更新したいのですが難しいのです。

詳細はメンタリングサービスのときにでも聞いてください、色々話します。

まとめ

マイコンのレジスタ設定を怠り、動作不良を招いた
レジスタ不定となるのは、外気温や電源電圧レベルに影響を受けるため
マイコンが動き出したらちゃんとレジスタ設定しましょう

無料特待プランあり!ウズウズカレッジIoT/組み込みコース。

組込エンジニアって実際どうなの?業界の話を聞いてみたいという方向けにメンタリングサービスを行っております。
Zoomでお話できればと思います。組み込み業界を検討している方はどうぞ。