RX71M T4_Libraryの送信処理の書き方

RX71MにT4_Libraryを組み込んで、外部アプリケーションとの通信処理を実装しています。

外部アプリケーションからの受信データに基づいて、返信データを作成し外部アプリケーションに送信するという処理を行いたいです。

受信処理(tcp_rcv_dat())はコールバック内で行っていますが、送信処理(tcp_snd_dat())は返信データが完了したタイミングで送信したいのですが、

そうなると送信処理はコールバック内では記述できないと考えています。

受信処理はコールバックで、送信処理は別タスクで、となると非対称で違和感を感じています。

上記のような処理の実装の常套手段などがあればお聞きしたいです。

  • いたう さん、
    かふぇルネ管理人です。
    お問合せに回答できるユーザーさんがおられないようです。
    下記URLのルネサス技術問合せ窓口にお問合せ頂くのが良いと思います。
    URL: ja-support.renesas.com/dashboard

    よろしくお願いします。
  • いたう さん
    ほや です。こんにちは。

    > 受信処理はコールバックで、送信処理は別タスクで、となると非対称で違和感を感じています。
    一般論ですが、
    受信は相手が勝手に送り付けて来るので直ちに受け付けないといけないのに対して、
    送信は自分の都合の良いタイミングで送れば良いので、
    送受信の仕組みが違うのはむしろ自然な事だと思います。

  • いたうさん

    シェルティです、こんにちは。

    T4の設計を担当しました。
    送信と受信を非同期にかつ対称に行うのをなるべくきれいに実装する方法は? ですね。

    OSベースであれば、受信タスク・送信タスク・調停タスクとして、調停タスクを介して送信と受信を対称的に行うことはできますが、
    OSベースでなければ、ほやさんの仰る通り送受信で仕組みが異なってしまうことは致し方なしですね。

    OSベースでない場合は、tcp_can_cep()を使って受信をキャンセルして送信することで非対称ではありますがいたうさんの実現したい動作は出来ると思います。
    キャンセル中や送信中も、受信はしっかり働いていて、T4ライブラリ内のTCPウィンドウに自動的にデータが溜まる仕組みになっているので、
    キャンセルや送信が完了してから受信APIを呼べばそれまでに溜まった受信データを取り出すことができ、
    特に受信データを取りこぼすこともありません。

    あるいは、対称性に拘るのであれば、送信専用の通信端点、受信専用の通信端点、
    と根っこから分けてしまうことで、対称的に作ることは可能と思います。

    以上です
  • いたうさん

    シェルティです、こんにちは。

    「受信キャンセル⇒送信⇒受信開始」を繰り返すサンプルを前に書いた記憶があったので
    T4のパッケージを再確認したところ、パッケージに入ってました。
    #すみません、現場から少々離れ気味になっているので内容物をしっかり把握しておりません

    www.renesas.com/.../m3s-t4-tiny-for-rx.html
     ⇒一番下のダウンロードボタン
      ⇒パッケージを解凍し、以下パスのコードを参照
      \r20an0051xx0209-rx-t4-fit\FITDemos\rskrx65n_2mb_tcp_nonblocking_cancel\src\tcp_blocking_cancel
       echo_srv_tcp_nonblocking_cancel.c

    以上です
  • ご連絡遅れて申し訳ありません。

    ご回答ありがとうございます。
    ご指摘のとおりだと思ったので、受信処理はコールバックで、送信処理は別タスクで、という設計で進めています。APIの視点に固執し過ぎていました。

    ご貴重なアドバイス、大変助かりました。
  • シエルティさん

    ご連絡遅れて申し訳ありません。

    ご回答大変助かりました。
    アドバイスいただいたとおり、サンプルを参考に設計実装を行い、所望の動作を得ることができました!!送信処理は別タスクですが、キャンセルAPIを実行してコールバック内で送信APIを実行するようにしました。
    T4の仕組みもご教示いただき、大変勉強になりました!