自作関数のリエントラント性について

RL78/G14(R5F104LLAFB#V0)で、C言語の自作関数を使用しておりますが、この関数をメインルーチンと割り込みルーチンの両方で使用しております。

関数内ではグローバル変数を使用しておらず、リエントラントになっていると考えております。

 

void mmcopy( _UBYTE *d5, _UBYTE *s5, _UWORD n)
{ _UWORD i;
for(i=0;i<n;i++)
*(d5+i) = *(s5+i);
}

 

この関数がメインと割り込みで競合した場合、カウンタiはスタック退避されて戻れると認識しておりますが、E1エミュレータを接続し、連続運転していると

RESF=10hのリセットが発生します。OCDトレースを見るとこの関数で無限ループに陥っているように見えます。

RL78では上記のような関数はリエントラントにはならないのでしょうか?

Parents Reply Children
  • のーしゃんさん

    コメントありがとうございます。

    参考にさせて頂きます。
    但し、症状が発生する率が社内のデバッグ環境では低いため、効果の確認に時間を要します。
    現場では高頻度で発生するのですが、社内環境では半年間でないこともあります。
    3月はたまたま高頻度で出たので良かったのですが、3/19以降は今のところ発生しておりません。