ルネサス製、ネットワーク・ソフトウェアーをgccで利用する

ネット関係をチマチマ実装している・・・

色々調べたが、やはり「ルネサス」が提供するネット関連のソフトウェアーが
一番ハードルが低いだろうと考えた。
※自分でスクラッチから実装するには、時間がかかり過ぎるので、再利用させ
てもらう。

他のオープンソース(GPL)に、フル機能の物もあるが、内容を理解して、
使うにはそれなりの時間と労力がかかるだろうし、大抵、リアルタイムOSの
下で動作するように設計されている、それはそれで、良いのだが、自分として
は、OSに依存しない事がメリットになると考えており、パフォーマンスを引
き出すのも作り方しだいと思うので、今回はそのような方針で行った。
※多分、RXマイコンで、このような方向性で行っているプロジェクトは少な
いと思う。

-----

まず、ルネサスのソフトウェアー郡から、

an-r01an3467jj0111-rx-fit

をダウンロードして精査した。
※アーカイブはモジュール別になっており、必要なモジュールを展開した。

r_ether_rx_v1.11    ※参考にして C++ に移行
r_t4_dhcp_client_rx_v1.04    ※参考にして C++ に移行
r_t4_driver_rx_v1.05    ※参考にして C++ に移行
r_t4_rx_v2.05
r_socket_rx_v1.31

※ドキュメントはしっかりしており、利用法やカスタマイズの方法も詳しく書か
れているが、肝心のソースコードの品質はあまり良くない。
※基本、ルネサスのIDEでコンパイルする事を前提にしている為、そのままで
は、gcc でコンパイルする事は出来ない。

以下はごく一部:
・規約違反
・意味が無く、不必要で危険なキャスト
・「const」が使われていない
・適切では無い戻り値の管理
・不必要で混乱するtypedefによる「型」の再定義
・関数や変数の一貫しないプロトタイプ宣言や、方法
・gcc ではコンパイルできない、又は警告となるような実装依存
・POSIX 等、標準ライブラリーとの親和性が悪い

また、ハードウェアー定義の「iodefine.h」は使いたく無いので、ハードに依存し
た部分はC++で書き直した。
※既に、インサーネット以外のハードウェアーリソースは十分あるので、元のシス
テムに依存する部分を書き換えている(そんなに多くは無い)
※「r_ether_rx、r_t4_driver_rx」など
他、タイマーの設定や、割り込み関係の制御など、ハードに依存する部分を分離し
て追い出し、書き換えた。

このネットスタックは、インサーネットと、インサーネットDMAC、タイマーで
動作するように実装されており、割とシンプルな構造となっている。
※タイマーは10ms(100Hz)で動作させる前提になっている(変更可能)

TCP/UDPのインターフェースは、まだ実装中なのだが、「r_socket_rx」が
あるので、これを利用しようと思う。(BSDソケットの縮小版らしい)
※HTTPサーバーや、FTPサーバーも専用のモジュールがあるがソケットを使
うコードで統一するので利用しない。

とりあえず、それなりに時間がかかったが、ようやく、DHCPが動いて、ping が
通るようになったので、全体プロジェクトをコミットした。
※以前に使った、GR-KAEDE、WEBプログラミング用コード(Arduino互換)
は、順次廃止して、新しいスタックに移行する予定。

GR-KAEDEネットワーク関係