2017-08-30 232 views
0

私は同じポート番号でUDPメッセージを非同期に送受信できるはずのアプリケーションを開発しており、これを行う最善の方法について少し混乱しています。私はSTM32プラットフォーム上でLwIPとFreeRTOSを使用しており、netconn apiを使いたいと思っています。同じ接続でLwIPでUDPパケットを送受信する?

私のアプリケーションは必要があります。

  • は、特定のISR火災の後にメッセージを送信します。私はISRがセマフォをリリースするようにセットアップしています。これは私のUDPタスクが消費するものです。
  • 私は、Linux上でこれを開発していた場合

全ての時間メッセージを受信し、私はそれが、送信のための1つのスレッドを持っている意味をなすだろうと1つの受信、または多分select OSコールを使用すると思います。私が知る限り、どちらもLwIPで実行可能ではありません。

私が考えた唯一の選択肢は、私のUDPタスクでこれを行うことです。

void my_task(void) 
{ 
    // setup netconn connection here 
    netconn_set_recvtimeout(conn, 1); 

    while (1) 
    { 
     // Only wait 1ms to take the semaphore 
     if(xSemaphoreTake(isr_semaphore, 1) == pdTRUE) 
     { 
      netconn_send(conn, nbuf); 
     } 

     // Only block for 1ms to receive a UDP message 
     if(netconn_recv(conn, mybuf) == ERR_OK) 
     { 
      //process incoming data 
     } 
    } 
} 

しかし、これは1コールごとに1msを無駄にしているので、これはかなり醜いと思われます。同じことを達成する良い方法はありますか?私はこれが本当に共通の要件でなければならないと感じていますが、私はそこにこれの例を見ません。

答えて

0

LWIPのマニュアルにはnetconn APIが記載されているので、APIを順次ブロックしているためです。
非同期にするには、コールバックベースのraw APIを使用する必要があります。

関連する問題