マイクロテクニカ製品サポートFAQ
[一覧] [1つ前に戻る] [マニュアル及び各種ダウンロードページへ]
コンパイルすると"Reentrancy not allowed: function..."というエラーが表示される
これは割り込みルーチン内やサブルーチン内で、更に別のサブルーチンをコールした時や、組込ライブラリを呼び出している時に指摘されるエラーです。

C言語におけるリエントラントに関するエラーで、リエントラント(プログラム又はサブルーチン、組込ライブラリが実行されている時に、その実行が完了する前に再び呼び出されて、実行されても安全だという性質)が許されていない関数等をコールした時に発生します。

多くは割り込みルーチン内やサブルーチン内(main関数以外)で、リエントラントが許されていない関数を呼び出すようなプログラムを記述すると発生します。例えば割り込みルーチン内で、LCD_OUT()関数を呼び出すと発生します。これはLCD_OUT()関数は複数よ呼び出し元から呼び出されても安全であるように作られた関数ではないためです。main関数からコールすることは問題ありませんが、別のサブルーチンからコールされることは安全にその関数が実行できる保証がないためです。

よってこのエラーが表示される場合には、その原因となっている関数をサブルーチンや割り込みルーチン内で呼び出せませんので、main関数内で呼び出すような仕組みにプログラムを考える必要があります。

リエントラントについて更に詳しく知りたい場合には下記のサイトを見るか、C言語の専門書をお読みください。mikroCに限らずC言語の一般的なことがらです。

http://ja.wikipedia.org/wiki/%E3%83%AA%E3%82%A8%E3%83%B3%E3%83%88%E3%83%A9%E3%83%B3%E3%83%88
オリジナル - FAQみたいです - 猫でいいです