μNet3/Standard版をご使用の場合、1472バイトを超えるUDPパケットの送受信が失敗してしまう(μNet3/Standard版)を参照ください。
※使用した評価ボードのメモリ上限の関係で、32739バイトの送受信となっています。
実際のμNet3のUDPフラグメントパケットの上限は65507バイトとなります。
32739バイト(※1)のUDPパケットの送受信など大きなフレームのやり取りをする場合は、
以下の手順を踏む事で実現する事が出来ます。
※1:20(IPヘッダ) + 8(UDPヘッダ) + 32739(ペイロード) = 32767
■ネットワークライブラリの再作成
ユーザが任意でネットワークバッファの確保処理やネットワークバッファの
大きさ、種類、それぞれの数を管理を行う機能を有効にするため以下の手順でμNet3ライブラリを再作成します。
1.「\Network\lib\M4\uNet3cortexm4.eww」などのソリューションファイルをIDEで起動
2.コンパイル時のプリプロセッサ定義に「EXT_ALOC_SUP」を追加 3.全ライブラリプロジェクトにプリプロセッサ定義を追加し、リビルドを行う 4.Configurator.exeにて、以下のリソース定義を追加/変更 5.「netmem_cfg.c」のソースファイルを追加し、以下のネットワークバッファ拡張管理処理を追加
コード: 全て選択
#include "kernel.h"
#include "net_hdr.h"
#include "net_sts.h"
#include "net_def.h"
#include "net_cfg.h"
#include "kernel_id.h"
#include "net_id.h"
#define NET_LARGE_BUF_SZ 32767 + 76;
ER net_memini(void)
{
extern UW NET_BUF_SZ;
NET_BUF_SZ = NET_LARGE_BUF_SZ;
return E_OK;
}
ER net_memext(void)
{
return E_OK;
}
ER net_memget(VP *adr, UINT len, TMO tmo, ID *id)
{
if ( len > NET_BUF_SZ ) {
return E_NOMEM;
}
if ( len > CFG_NET_BUF_SZ ) {
*id = ID_NET_MPF_32767;
} else {
*id = ID_NET_MPF;
}
return tget_mpf( *id, adr, tmo );
}
ER net_memret(VP adr, ID id)
{
return rel_mpf( id, adr );
}
コード: 全て選択
{
static UB buf[32739]; /* 自動変数によるスタック消費回避の為、static */
T_NODE remote = { 0 };
remote.ver = IP_VER4;
remote.num = 1; /* ネットワークデバイス番号 */
remote.ipa = ip_aton( "192.168.1.76" );
remote.port = 12345;
ercd = con_soc( ID_PROTO_UDP, &remote, 0 );
ercd = snd_soc( ID_PROTO_UDP, &buf[0], 32739 );
slp_tsk();
}
コード: 全て選択
{
static UB buf[32739]; /* 自動変数によるスタック消費回避の為、static */
ercd = rcv_soc( ID_PROTO_UDP, &buf[0], sizeof(buf) );
slp_tsk();
}
65507バイトなど、より大きなUDPフラグメントパケットを送受信する場合は、
Configurator.exeの設定にて「ネットワークバッファの数」を増やしてください。