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

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
  • > RL78では上記のような関数はリエントラントにはならないのでしょうか?

    RL78 がコード生成をするわけではないので問い合わせ内容が意味を持ちません。
    使用されてるコンパイラやコンパイルオプション、_UBYTE等の定義内容等明らかでないと明確な回答は不能です。該当部分の逆アセンブルリストがあれば判断は早いと思います。
Reply
  • > RL78では上記のような関数はリエントラントにはならないのでしょうか?

    RL78 がコード生成をするわけではないので問い合わせ内容が意味を持ちません。
    使用されてるコンパイラやコンパイルオプション、_UBYTE等の定義内容等明らかでないと明確な回答は不能です。該当部分の逆アセンブルリストがあれば判断は早いと思います。
Children
No Data