先日のプログラムの書き換えで エラーの大きな原因がタイマーの割り込みだろう?
と判断したのですが 念のために 再確認してみる事にする
タイマーの割り込みさえ被らなければエラーが出ないのかどうかを まずは確認しておく必要があるだろう、と思ったからです
まずは ここを押さえてから より良い方向へ進めていこうかと思います
そんな事で
SDカード書き込みを 全てタイマー割り込みで呼び出す事でエラーが出ないように変えていたのを もう一度 全てメインルーチンから呼び出す形(エラーが出た時の状態)に戻した上で SDカード操作(エラーチェックからクローズまで)の手前で
Disable Timer1(タイマー割り込みの禁止)
書き込みが終われば
Enable Timer1(タイマー割り込みの許可)
という形で あえて 書き込み時だけ タイマーの割り込みを禁止する形に変えて タイマーの割り込みだけ回避できれば エラーが発生しないのかを確認するようにしてみた
それと合わせて あえて 500msだったタイマーの割り込みを100msの割り込みにして わざとプログラムを過酷な状況で回してみる(本当の実用上は1秒で充分)
その上に 2秒毎、10秒毎、1分毎、10分毎、1時間毎 のすべてのデータログを全部記録させた上に エラー確認の為のLCD表示をフル回転(10回/1秒くらい)させて より過酷な状況で回してみる
これだと 2秒から1時間まで すべてのデータ書込みが1時間毎に重なる瞬間ができる
こんな方法が正等な方法かどうかは知りませんが やるだけやってみる事にした
SDカードの操作を全てタイマーの割り込みから呼び出せば解決してた事なんですが タイマーの割り込みで SDカードの書き込みを呼び出すと もっと早い割り込みが必要になった場合に対応できなくなる可能性が高いので メインルーチンからの呼び出しでも タイマー割り込みに邪魔されない方法として使えるかどうかを確かめてみる価値はあるだろう、という
単なる思い付きです
今のところエラーは出ておりませんが まだ24時間なので とりあえずもう1日回してみて判断したいと思います