データーロガーのバク

前回のデーターロガーVer2の続き。

プログラムの話なので、マニアックな話になります。

Ver1・2共にこれまではキャブセッティングメインに使用していたので、1回の使用時間はせいぜい1分程。

セッティングも落ち着いてきたので、通常走行時の記録が20分程可能(Ver2は最大1時間30分)なので、ダラダラと記録したら、途中でプログラムが暴走して、めちゃくちゃな作動をする(^_^;)

プログラムのシミュレーターでチェックすること数時間・・・。 やっと不具合箇所を発見しました!

不具合内容はメインの処理をやっているとき、割込みって作動があって、ロガーのプログラムでは3種類割込みを使用しております。

具体的に説明すると、メモリーにデーターを記録させている時、点火プラグに火花が飛んだとします。すると点火信号がPICに入力されます。その時PICは記録の動作を一旦止めて、点火信号が入力されたので前回の点火信号からの時間を記録して、時間カウンタをリセットして、次のカウントに入り、元の作動に戻ります。
そんな感じの割込みが、その他2種類あります。

割込み処理は1つしか実行出来ないので、プログラムで割込み処理中は他の割込み(多重割込み)を禁止させるんですが・・・

これまでプログラムをする時、アセンブラって言う言語でやってましたが、このロガーのプログラムはC言語で作成しました。

C言語高級言語って呼ばれて、色々な設定が楽に出来ます。割込みもアセンブラなら、割込みが発生した時に実行中のアドレスを記録して、割込み終了時に再度アドレスを読み込ませるって設定が必要です。
C言語は割込みをさせるぞ!って宣言すれば、自動で上記の設定をやってくれるんです。

っで、その多重割込み禁止も自動で設定してあったのを知らずに、強制的に割込み禁止と再開の不要なコマンドを設定したせいで、多重割込みが発生して暴走していたって話。

マニアックなプログラムネタにお付き合い頂きありがとうございました(笑

しかし、C言語って楽ですね~~!