お世話になっております、ムヌルです。
ふとした疑問があったので、質問させていただきました。
結論から言うと、
①割り込み関数に戻り値の設定は可能でしょうか(関数をuint8_t型かint型にしたい)。
②割り込み関数は関数名から自作していく事は可能でしょうか。
という二点についておききしたいです。
私はいま、CS+のr_cg_it_user.cファイルのstatic void __near r_it_interrupt(void)に、
戻り値を設定したいと考えています。
具体的には状態遷移を用いて、return値をメインで使用したく、この関数を
『static void __near』 r_it_interrupt(void)
↓
『uint8_t』 void __near r_it_interrupt(void)
に変更したいと考えていますが、これをするとエラーで『不正な#pragmaを指定しました』
とエラーがでてしまいます。
#pragmaの仕様等についても理解できていないので、ここを調べろというサイトや資料でも構いません。よろしければお力添えいただければ幸いです。
#pragmaはコンパイラの独自仕様を実装するためにあるものなので、使っているコンパイラのマニュアルを見てください。違うコンパイラの記事を見ても参考になりません。(参考)CS+のオンラインヘルプ - CC-RXの拡張言語仕様:https://tool-support.renesas.com/autoupdate/support/onlinehelp/ja-JP/csp/latest/CS+.chm/Compiler-CCRX.chm/Output/ccrx04c0203y.htmlベクタテーブルに書かれたアドレスをマイコンが直接呼び出すのが割り込みで、呼び出し元の関数はありません。引数も戻り値もないのはそれが理由です。(参考) 割込みの仕組みhttps://www.lapis-tech.com/jp/common/miconlp/tips/3-24-%e5%89%b2%e8%be%bc%e3%81%bf%e3%81%a8%e3%81%af3/割り込み関数内の処理内容を他でも使いたいなら別に関数を作るべきです。割り込み関数を新たに作りたいなら同じデバイスのサンプルプロジェクトを参考にしてください。ベクタテーブルの書き方もデバイスファミリやデバイスの世代で違うので(割り込みの仕様もデバイスの仕様に依存するので)御注意ください。
ほや様
アドバイスありがとうございます。無事解決いたしました。
ほや様の説明とサイトの説明で点と点がつながって腑に落ちました。
どうもありがとうございました。