私は同じポート番号で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を無駄にしているので、これはかなり醜いと思われます。同じことを達成する良い方法はありますか?私はこれが本当に共通の要件でなければならないと感じていますが、私はそこにこれの例を見ません。