こんにちは
e2studioのスマートコンフィギュレータで生成した割込み関数の一部が未使用のstatic関数と警告がでますがなぜでしょうか?
本当に未使用かというとそうでもなく,デバッグモードできちんとブレークがかかります。
警告を無視すればいいのですが気持ち悪いので質問させていただいた次第です。
例えば以下のソースなどです。
#if FAST_INTERRUPT_VECTOR == VECT_SCI2_TXI2#pragma interrupt r_Config_SCI2_transmit_interrupt(vect=VECT(SCI2,TXI2),fint)#else#pragma interrupt r_Config_SCI2_transmit_interrupt(vect=VECT(SCI2,TXI2))#endifstatic void r_Config_SCI2_transmit_interrupt(void){ r_Config_SCI2_callback_transmitend();}
また,使用している環境は以下の通りです。
e2studioのバージョンは23.1.0
SCI長保同期式モード1.12.0
CCRXビルダー(バージョン情報がどこにあるのかわからない…)
割り込みハンドラはベクタテーブルから外部参照されるので、本来は static を付けてはいけない所、#pragmaによって外部参照可能なシンボルとして実装されることでたまたまリンク可能になっています。それで言えば warningが正しく、ソースの方がコンパイラの仕様に依存した書き方になっているのですが、うっかり普通のC言語関数として呼び出されないようにとの配慮でわざわざそのような書き方がされているものと思います…
割り込みハンドラはベクタテーブルから外部参照されるので、本来は static を付けてはいけない所、#pragmaによって外部参照可能なシンボルとして実装されることでたまたまリンク可能になっています。それで言えば warningが正しく、ソースの方がコンパイラの仕様に依存した書き方になっているのですが、うっかり普通のC言語関数として呼び出されないようにとの配慮でわざわざそのような書き方がされているものと思います。
ほやさん,わわいさん(リプ先にはなっていませんが)ありがとうございました。
理屈は置いておいて無視できる警告ということはわかっていたのですが開発環境もコンパイラもルネサスの物を使っているにもかかわらず警告として挙がってしまうのが問題だと考えてこの投稿をさせてもらいました。
私の感覚としては自社の物で警告がでてユーザーを無意味に考えさせてしまうということがわかっているはずなのだから例外的にでも警告にならないようにルネサス側で処理されていて当然であると考えるため,警告がでる理屈を教えていただいた今でも納得できない部分が残りますが,そういうものだとして飲み込むべきなんでしょうね。
わわいです
まあ、おっしゃりたいことはよくわかりますが、e2Studioってのは無料のツールです
べつに致命的でもない回避策(無視する)もある不具合について、そこまで要求するのはちと酷かと思います
ここらへんの機能ってのはEclipseに実装されているものをそのまま持ってきているものですんで、メーカに修正要求したところで、これが修正されるのは望み薄かとも思います。
# これが嫌だと言うなら、有料のツールを使おう、ってことになろうかと
例えば __far などコンパイラの独自表記がエラーにならないようになっています(無視するだけなので変な所に__farを書いても警告されません)。それぐらいなら設定(「C/C++ 一般」→「Preprocessor Include Path, Macros etc.」)で回避できるのですが、#pragmaを解釈するには標準のEclipse(のCDT)のコード解析の処理に手を入れなければなりません。Eclipseコミュニティが他に影響を与えるようなコンパイラ独自の仕様を受け付けるとは内容的に考えにくいです。