こんにちは
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言語関数として呼び出されないようにとの配慮でわざわざそのような書き方がされているものと思います…
わわいです
昨今、VSCodeやEclipse(e2Studioもそうですね)などの統合開発環境がはやってますが、これらを使う場合のエラーや警告が出る場合、どこからそのエラーが出るのか、というのを考える必要があります
1.その開発環境が独自に解釈してエラーを出している.
2.ビルドした結果としてそのエラーが出ている
と、並べて書くとだいたい察しが付くかとは思いますが、1と2は全く別のコードによって出されてます
ってことで、真剣にみるべきものは、2で出るエラー、警告であって、1で出るものについてはあんまし真剣に取る必要はない、と思っておきましょう。
1では、個別のCPUの独自の文法については、きちんと解釈してくれない、と考えておいたほうがよろしいかと思います