RL78/l1Aでマイコンリセットしてしまいます

R5F107AEで意図しないタイミングでソフトリセットが発生します。
RESFレジスタによりリセット要因を調査すると、「WDT」や「パリティエラー」や「不正命令」など、
色々な要因でリセットしていますが、「不正メモリアクセス」でリセットすることが多いです。
・PCとUART通信を1sec毎に行っていて、リセット発生頻度は連続通電で1日に1回程度です。
・リセットタイミングは、送信転送完了割り込み処理を終了し次の1バイトを送信時にリセットしています。
・CS+のスタックメモリ見積ツールを使用し、スタック領域破壊は無いことを確認しました。
・リンクディレクティブファイルに問題ないことはメーカーに確認しました。
・今のところE2Liteを接続してのオンチップデバッグではリセットしていません。
・EEPROMエミュレーション・ライブラリPack01 パッケージVer2.1.0を使用しています。

コードとコード生成ツールを確認した限りでは変な割り込みはなさそうですが(再度調査します)
何かマイコンリセットしてしまう要因は何か考えられますでしょうか。アドバイスいただけたらと思います。

Parents
  • 現象からすると、受信バッファの定義範囲を超えるサイズを受信するなどにより、その後ろに定義した変数の値を壊すことが考えられます。

    例えば、以下のように宣言しているとして、単純にrxbufに受信データを順次格納するとします。

    unsigned char rxbuf[256];

    unsigned char rxstatus;

    256バイト以上受信してしまうと、受信データを保存する領域が、rxstatusの変数領域にはみ出してしまうなどのケースがあり得ます。上記の場合は、rxstatsuが破壊されることになりますので、それ以降プログラムがどのように動作するかは保証できなくなります。※リングバッファ構造や、キュー構造なら別ですが。

    リセットがかかる原因は、スタック破壊以外にもこのような配列のサイズを超えてアクセスすることや、ポインタの操作誤りなどによるものがほとんどです。

Reply
  • 現象からすると、受信バッファの定義範囲を超えるサイズを受信するなどにより、その後ろに定義した変数の値を壊すことが考えられます。

    例えば、以下のように宣言しているとして、単純にrxbufに受信データを順次格納するとします。

    unsigned char rxbuf[256];

    unsigned char rxstatus;

    256バイト以上受信してしまうと、受信データを保存する領域が、rxstatusの変数領域にはみ出してしまうなどのケースがあり得ます。上記の場合は、rxstatsuが破壊されることになりますので、それ以降プログラムがどのように動作するかは保証できなくなります。※リングバッファ構造や、キュー構造なら別ですが。

    リセットがかかる原因は、スタック破壊以外にもこのような配列のサイズを超えてアクセスすることや、ポインタの操作誤りなどによるものがほとんどです。

Children
No Data