T4ライブラリ _process_tcpip 多重割込みについて

いつもお世話になっております。

T4ライブラリ _process_tcpip の呼び出しについて、

疑問点が湧いてきましたので、ご意見をお聞かせください。

現在RX65NへFreeRTOS + FITモジュールを使用してT4ライブラリを導入しています。

T4ライブラリの_process_tcpipについて呼び出し元を調査していたところ、

・CMT1(10ms周期) 割り込み コールバック

・EDMAC0 EINT0 割り込み コールバック  

の2ルートで呼び出されている様でした。

(意図して上記設定としています。)

気になったのは「EDMAC0 EINT0 割り込み コールバック」なのですが、

コールバックにより、t4_driver.cのlan_inthdrという関数が呼び出されいるのですが、

この関数内で多重割込みが許可されています。

T4ライブラリ内を確認すると、


void _process_tcpip(void)
{
~~~~
    if (_process_flag == 0)
    {
        _process_flag = 1;

~~~~~

        _process_flag = 0;
    }
~~~~
 
    return;
}

という実装になっていました。

この場合、


if (_process_flag == 0)
{            ⇐ここで他要因による割り込み
_process_flag = 1;


 1を書く前に多重割込みが入るとフラグが書換えられず、

他要因による_process_tcpipが走ってしまう可能性があります。

こちらが調査して分かりましたので、

現状CMT1の割り込み優先度をEDMAC0の割り込み優先度よりも低くすることで対策していますが、

このような認識で問題ないでしょうか?

(CMT1割り込みの場合は多重割込みが無効状態ですので、上記のような考慮は不要と考えています。)

またT4ライブラリの案内として、上記のような内容はありましたでしょうか。

(見落としていましたら、申し訳ありません。。。)

ご意見いただけますと、幸いでございます。

よろしくお願いいたします。

Parents Reply Children
  • NoMaYさん

    リマインドありがとうございます。

    お休みを挟んでいたため、すっかり頭から抜けておりました。

    実機で動作確認等していますが、今のところ特にトラブルは発生しておりません。

    質問の発端としては、

    各機能の割り込み優先度と多重割込み状態を確認している際に発見し気になったためです。

    以前シェルティさんが回答されている質問スレッドで、

    _process_tcpipの呼び出しについては、多重割込みを推奨されていましたので念のため影響がないか確認させていただきました。

    japan.renesasrulz.com/.../t4-_process_tcpip

    T4ライブラリの導入に関しては、色々理由はありますが、

    最終的にはe2StudioとT4ライブラリを組み合わせたときの導入難易度が比較的低かった点が挙げられます。

    導入が容易かつソースコードもありトラブル時の対応もできそうだったので、今回の構成に決めました。

    (プロトコルスタックの検討自体は、大分前のことでしたので記憶が少しあやふやです。。。)