お世話になっております。
カイロスです。
使用マイコン:RX630
以下2点質問させていただきたく思います。
・割り込みのRAM配置に関して
・ソフトウエアリセット時のウオッチドックタイマに関して
まず一つ目なのですが、現在、FWアップデートをプログラムを起動しながら実施しています。
FWアップデートの方法としては以下となります。
コードROMは、運用ROMと更新用ROMに分けています。
・シリアル通信にて、外部からSRAMにmotファイルを保存する。
・更新用ROMに新規プログラムを保存
・再起動し、運用ROMの値を更新用ROMにコピー後、再度再起動
E2フラッシュに関するプログラムはRAMに配置することと、ROM書き込み時に割り込みを禁止にすると無事に更新することができました。
上記でも問題はないのですが、割り込みを停止しない方法があるならそのほうが良いと考え、割り込みのプログラムをRAMに配置してみました。以下を参考にし、コードとベクタテーブルはRAMに配置されていることを確認しました。
https://japan.renesasrulz.com/cafe_rene/f/forum5/7851/ram
しかし、いざ更新処理が走るとCPUが再起動してしまい更新できませんでした。
デバッグツールをつないだ状態だったため、そちらの割り込みをなくしても同様でした。
他に必要な処理があれば、ご教授願いたいです。
次に、ソフトウエアリセット時のウオッチドックタイマに関してですが、上記の再起動はソフトウエアリセットを使用していまして、再起動後ウオッチドックタイマが停止しておらず、更新時が完了する前にオーバーフロー割り込みが発生し、ROMアクセスと重なりCPUが停止する現象とが起きました。
今は、再起動後もウオッチドックタイマをリフレッシュするようにしました。
ソフトウエアリセット時にもウオッチドックタイマを停止する方法があれば教えていただきたいです。
長文で申し訳ありませんが、よろしくお願いいたします。
割り込みのRAM配置に関してですが、自己解決しましたのでご連絡いたします。
私の認識しとしてROMアクセス中も割り込みをRAM配置していれば、割り込み処理が走っても問題がないと考えていましたが、そもそも割り込み処理の中でconst宣言等にアクセスしていましたので、その辺りが問題だったのかな?と考えます。
また、サンプルプログラムを確認したところ、P/Eモード時はデータフラッシュ以外の割り込みが実施しないようにIPLを設定していましたので、基本P/E処理中は割り込み禁止にする必要があると理解しました。
上記認識で間違いがあれば、ご教授願えればと思います。
カイロスさん、こんにちは。NoMaYです。> また、サンプルプログラムを確認したところ、P/Eモード時はデータフラッシュ以外の割り込みが実施しないようにIPLを設定していましたので、基本P/E処理中は割り込み禁止にする必要があると理解しました。`基本`という表現が微妙ですけれども、私は、このIPLの設定の処置は、単純にサンプルプログラムを素朴なものにしておきたかった、だけではないかな、と思います。(すみません、サンプルプログラムのソースを実際に確認していませんけれども。) もっとも、そのことを`基本`と表現されたのかも知れませんけれども。私は、実行するプログラム(標準ライブラリ/ランタイムライブラリ/コンパイラ生成コード内のジャンプテーブル/プログラムがアクセスするデータ/諸々)がちゃんとRAM上にあって、かつ割り込みベクタテーブルもRAM上にあれば、P/E処理中でも割り込みを使用出来ると思うのです。(でも、繰り返しになりますけれども、ちゃんとそうしないといけない、という手間が掛かってしまうことを`基本`と表現されたのかも知れませんけれども。)
NoMaYさん
お返事ありがとうございます。
私の伝えたいことを読み取っていただきありがとうございます。
NoMaYさんが翻訳頂いた通り、手間をかけないなら、という表現で’基本’を使っていました。わかりづらく申し訳ありません。
>このIPLの設定の処置は、単純にサンプルプログラムを素朴なものにしておきたかった、だけではないかな、と思います。
なるほど、納得できる理由ですね。
また時間があれば、全てをRAM配置した状態で確認してみたいと思います。