TCP/IPプロトコル・スタックの省メモリ開発事例(後編) ――ROM 8Kバイト,RAM 0.5KバイトにTCP/IPプロトコル・スタックを収める
● 迷った項目を再度見直す
前回の開発で実装するべきかどうかを最後まで検討した項目のうち,以下の項目については,今回は実装を見送りました.
1) スロー・スタート,ふくそう回避
データの送信時には,1パケットごとに確認応答を待つように仕様を変更したため,スロー・スタートやふくそう回避のための処理は不要となりました.
2) 遅延ACK
これは転送性能や効率に関する機能であるため,実装しませんでした.
3) RTTの計測
一般に,再転送の間隔やゼロ・ウィンドウ・プローブの送信間隔は,RTTに応じて動的に変更します.今回の開発では,再転送とゼロ・ウィンドウ・プローブの間隔を固定にしたため,RTTは不要となりました.
● 実装面でのくふう
実装面では,ROMの使用量を低減するために,以下の方針で実装しました.
- OSがなくても動作できるようにする
- できるだけ類似の処理を共通化し,関数にする
転送速度やプログラムの保守性をある程度犠牲にしながら,プロトコル処理の流れを見直しました.そのほか,マイコンの特徴を活用したり(例えば,使用頻度の高いグローバル変数を抽出して,それらに対するアクセスにはスタティック・ベース・レジスタ相対アドレッシングを使用するなど),コンパイラが生成するアセンブリ・コードに応じて,プログラムの記述を修正したりしました.