ルネサスエレクトロニクス製RL78マイコンのファームウェアのデバッグ時の話。
統合開発環境 C S +上で、自分で宣言したグローバル変数(RAM・パラメータ)をリアルタイムで表示する機能ってすっごく便利。
パラメータをリアルタイムに表示させて、どういう動きをしているのかを見たい時、
プログラムの中にデバッグ用の Logを埋め込んでおかなくてもいいし、
UARTなどのシリアル通信でPC側に送信する仕組みもいらないからです。
でも、調子に乗っていつもいつも使っていると、思わぬ落とし穴に。。。
よく読むと、
「実行中のメモリアクセス」
実行を一瞬停止してアクセスする
って書いてあります。
これを頭の片隅においておかないと、痛い目にあうことがあります。
ほんの一瞬かもしれないけれども、プログラムの実行を一瞬止めてメモリをリアルタイム表示させています。
だから、この機能をONしているときと、OFFにしている時って、どうしても微妙に動作が変わってきます。
私が使っている時に、実際に大きく挙動が変わってしまったことがあったので、
ここにも書いておきました。
スポンサーリンク
CS+でRAM(パラメータ・変数ウォッチ)のリアルタイム表示機能を常時「はい」にした時だけ動作が異常に
「何かプログラムの動きがおかしいな」
「あれ?昨日まで問題なく動作していたのに、急に動作がおかしくなった」
っていう時、ファームウェアとか使っているボードのせいではく、
実は、統合開発環境(デバッガ)側の設定の問題っていうこともあるんです。
冒頭に載せた画像にも書いてあるように、
例えば、表示更新間隔は500msecとなっています。
すくなくとも、500msecに1回はCPUを停止して、RAMをリアルタイム表示させる処理を行っていると思います。
私のケースでは、
約100μsec周期で、割り込み処理を伴う大きな処理を繰り返し行うファームウェアを
実行させている時に、想定外の異常な挙動をする現象が発生しました。
で、何が原因だろう?
って色々動作確認をして、問題の切り分けをしていったところ、
なんと、CS+のデバッグ設定の
「実行中のメモリアクセス」
実行を一瞬停止してアクセスする
に「はい」を設定していたら異常動作が起き、
「いいえ」に設定したとたんに異常動作が起きなくなったのです。
まさかのまさか、デバッグ環境の設定が悪さしていたなんて。
でも、こういうトラブルにはまって、丸1日つぶしたりって、結構多くの人が経験しているんじゃないかと思います。
CS+でRAM(パラメータ・変数ウォッチ)のリアルタイム表示機能の設定を確認する方法
上記画像の赤枠で囲んだところをたどれば設定の確認ができます。
「デバッグツール」
→
「デバッグ・ツール設定」
→
「実行中のメモリ・アクセス」
→
「実行を一瞬停止してアクセスする」
デフォルト設定では、「いいえ」
になっているはず。
でも、意図せず、PCのマウス操作やキーボード操作ミスで、知らないうちに、
「はい」
の設定になっているとかあるかもしれません。
または、自分以外の共同開発者のプロジェクトファイルをそのままコピーして使う場合、
その共同開発者が
「はい」
の設定のままにしていたりとかすることもあるかもしれません。
一度、チェックした方がいいです。
ちなみに、ネットで検索しても、
「CS+でパラメータのリアルタイム表示機能を使うと動作がバグった」
って感じの記述がなんにも出てこないんですよね。
めったに出ない異常現象なのかも。
まとめ
あくまで私の予想ですが、
多分、プログラムの処理時間がカツカツで、時間に余裕がないシビアなファームウェアになっている場合に、
RAMのリアルタイム表示機能を使うと、意図しない異常な動作が発生しやすいのではないか?
と思っています。
あくまで、パラメータのリアルタイム表示機能は、
必要な時だけ、デバッグのオプション、補助的なツールとして使うくらいの心持ちの方が
よいと思いました。