2006年頃、プロジェクトの要件により、マイクロコントローラーシステムで使用される外国のオープンソースTCP/IPプロトコルスタックであるLWIPに連絡し始め、この機会を利用して、ATMEL ARM7シリーズに基づいた「組み込みネットワークシステム設計」で印刷された最初の本を作成しました。この本の反応はかなり良いです。多くの人々が私にMSNを送ってくれました(このような良いインスタントメッセージングツールがMicrosoftによって放棄され、多くの連絡先が連絡先を失ったことは残念です)、または電子メール相談に関連する質問。私の元の執筆計画では、この本の出版物はほんの始まりに過ぎません。次に2番目の本を書きます。これは、LWIPに含まれるPPPプロトコルスタックの移植、アプリケーション、設計、および実装のシステムの紹介です。しかし、物事は私の願いに反していました、この本は遅れ、このジャンプは12年かかりました...
慎重に考えると、そもそも遅延には2つの主な理由があります。まず、家族や仕事などのために使い捨てになる時間が少なすぎます。第二に、PPPプロトコルに関連する十分な知識と技術的準備が不足しているため、自信、恐怖、停滞が不十分です。しかし、この事件は常に私にとって後悔でした。 12年は長くも短くもありませんが、私の心の後悔を小さな種に変え、夢のような夢の木に成長するのに十分です。
今、世界は20代に到着しました。流行が激化しています。私の使い捨ての時間は増加しており、私の技術的な能力は過去の能力とはほど遠いものです。夢の木が花を咲かせて実を結ぶ時です。最初を振り返ってみると、私は数年間業界に参入していなかったし、技術的な能力が限られていた。私は偉大なマスターの肩の上に立って、LWIPを移植して使用する方法を研究することができ、PPPスタックに触れることすらしませんでした。さて、もしそれが10年以上前から仕事を続けたなら、このことは無意味です。私自身の技術的強さを正確に理解していることに基づいて、私は完全なネットワークプロトコルスタックをゼロから構築することにしました。最後に、6か月以上にわたって、ONPSプロトコルスタック(ONPS、オープンネットプロトコルスタック)が初期開発を完了し、内部テストに合格しました。今日、10年以上の後悔が支払われています。さらに、20年以上の経験の後、私はついに心の中でコアの基本的なソフトウェアを作るという夢を持っています。今、これらの2つの夢も報われます。
新しいオリオールが最初に歌っているとき、必然的に多くの不十分なものがあります。オープンソースは、自分の興味が好きな人と共有、共有、研究することができます。これらの厳格な方法により、迅速に反復して迅速に成熟する可能性があり、LWIPに匹敵すると予想されます。
ONPSは、リソース制約のマイクロコントローラーシステムに適したオープンソースで完全に開発された国内ネットワークプロトコルスタックであり、イーサネット/PPP/TCP/IPプロトコルファミリーの完全な実装を提供し、SNTP、DNS、Pingなどのネットワークツールを提供します。イーサネット環境でのDHCP動的IPアドレスアプリケーションをサポートし、動的および静的ルーティングテーブルもサポートします。プロトコルスタックは、バークレーソケット層の実装もカプセル化します。このレイヤーは、バークレーソケット標準に従って完全に設計および実装されていません。代わりに、以前のソケットプログラミングエクスペリエンスに基づいて、ユーザーの使用を促進し、ユーザーコーディングを簡素化するという設計目標を持つ共通のソケットインターフェイス関数のセットを再構成および定義します。
プロトコルスタックは、従来のBSDソケットプログラミングに必要ないくつかの退屈な操作を簡素化し、選択/ポーリングモデル、ブロッキング、ノンブロッキングの読み取りおよび書き込み操作など、いくつかの不必要な操作の詳細を基礎となる実装に変更します。単純化は覆いを意味するものではありません。ソケットインターフェイス関数の基本的な定義、主なパラメーター、および使用方法は変更されていません。以前の経験とプログラミングの習慣に基づいて、すぐに開始してONPSスタックソケットを使用できます。プロトコルスタックの下部にあまり注意を払う必要はありません。ソケットAPIプログラミングを使用すると、LWIPと同じように、カスタマイズされたインターフェイス関数のセットを使用して同じ目標を達成するのではなく、複雑な通信アプリケーションのニーズを完全に満たすことができます。
マイクロコントローラーシステムの非常に異常なメモリ使用に適応するために、ONPSプロトコルスタックは、設計の開始時に書き込み時にゼロコピーを使用すると見なされました。ユーザーレベルのデータを低レベルのプロトコルに渡す過程で、プロトコルスタックは、BUFリストリンクリストテクノロジーを使用して、メモリコピー操作なしで送信されるまでリンクします。さらに、プロトコルスタックはBuddy Algorithmを使用して、プロトコルスタック操作中のメモリ利用を最大化し、メモリの断片化を最小化するために、安全で信頼できる動的メモリ管理関数を提供します。
2000年代および1910年代初頭とは異なり、UCOSIIおよびその他のRTOがマイクロコントローラーのアプリケーションシナリオで大規模に人気がなく、フロントおよびバックエンドシステムはまだ人気があり、開発者がほとんどのアプリケーションシナリオでRTOを使用することを選択することが主流になりました。したがって、プロトコルスタックは、その設計の開始時のフロントエンドモードとバックエンドモードをサポートせず、そのアーキテクチャデザインは人気のあるRTO(RT-Thread、UCOSII/IIIなど)に基づいていました。プロトコルスタック移植の主なタスクは、当然、異なるTOSの関連するOS適応層関数関数を記述することです。もちろん、非常に具体的なアプリケーションシナリオがあり、ONPSスタックをフロントエンドモードとバックエンドモードを採用するマイクロコントローラーに移植する必要がある場合、私の提案は、TCP/UDPの下でプロトコル層の通信処理ロジックを保持し、ターゲットシステム動作モードに適応するために上位レベルのシステムアーキテクチャを調整することです。
ONPSスタック設計は、TCP/IPプロトコルモデルの完全なセットを実装しています。データリンクレイヤーからIPレイヤー、TCP/UDPレイヤーと上記のバークレーソケットレイヤー、そして最後にユーザー独自の通信アプリケーションレイヤーまで、ONPSスタックはほとんどのネットワークプログラミングニーズを満たすことができるフルスタックカバレッジを実現します。そのアーキテクチャは次のとおりです。 
従来のネットワークプログラミングモデルと違いはないことがわかります。ユーザーは引き続きSocket APIを使用して、一般的なTCPおよびUDPネットワークアプリケーションを書き込みます。同時に、プロトコルスタックによって提供されるいくつかのネットワークツールを使用して、ネットワークタイミング、DNSクエリ、その他の操作を実行することもできます。
| 名前 | 説明する |
|---|---|
| BSD | ソースファイルは、バークレーソケットレイヤーの関連するインターフェイス関数によって実装されます |
| イーサネット | イーサネットII/ARPやEMACレイヤー、DHCPクライアントなど、イーサネットプロトコルファミリの関連する実装ソースファイル。 |
| 含む | プロトコルスタックヘッダーファイル |
| IP | IPおよびその上部ICMP/TCP/UDPプロトコルファミリの関連する実装ソースファイル |
| MMU | プロトコルスタックメモリ管理モジュールの関連する実装ソースファイル |
| net_tools | ネットワークツールは、DNSクエリ、ネットワークタイミング、Ping、Telnetなどのソースファイルを実装します。 |
| Netif | ネットワークカードとルーティング管理関連のインターフェイスにソースファイルを実装する |
| ポート | プロトコルスタック移行関連ソースファイル |
| ppp | LCP/IPCP/CHAP/PAPなどのプロトコルファミリの実装ソースファイルを含む、PPPリンクレイヤー関連の実装ソースファイル。 |
| tcpserverStackTesting | プロトコルスタックテストに使用されるTCPサーバー、IDEはVS2015用に開発され、ターゲットシステムはWin7以上です |
| test_code | Linuxの下のPPPダイヤル原理検証ファイル |
プロトコルスタックは、主流のアーム皮質シリーズMCUをサポートし、Keil MDKやIARなどの一般的なIDをサポートしています。移植の中心的なタスクは、RTOSシミュレーションレイヤーの書き込みと適応を完了することです。詳細な移植手順については、記事「ONPSネットワークプロトコルスタックの移行と使用手順v1.0」を参照してください。ここをクリックしてダウンロードしてください。この説明は、STM32F103RCT6とSTM32F407VET6の2つのハードウェアプラットフォームの移植例を提供します。各サンプルは、それぞれRT-ThreadおよびUCOSII RTO用です。サンプルプロジェクトは厳密な内部テストを受けており、直接使用できます。
時間がない場合、またはサンプルプロジェクトがターゲットプラットフォームと一致しない場合は、プロトコルスタック移行の一般的なガイダンスドキュメント「OPSスタック移行マニュアル」を直接参照できます。
プロトコルスタック開発の一般的なガイダンス文書については、「OPS Stack APIインターフェイスマニュアル」と「OPS Stackユーザーマニュアル」を参照してください。
STM32F407VET6プラットフォーム:RT-Thread移植サンプルUCOS-II移植サンプル
Qinheng CH32V307プラットフォーム:Hongmeng Liteos-M移植サンプルフリーロス移植サンプルRT-Thread移植サンプル
ONPSスタックの公式Webサイトにアクセスして、プロトコルスタックの開発進行、フォローアッププラン、最新バージョンなどの関連情報を取得できます。
使用中に問題や提案に遭遇した場合は、 ONPS Stack Communication Communityにアクセスして提案や質問を作成できます。新しいバージョンのリリースも通信コミュニティですぐに通知されます。
また、オンラインテクニカルコミュニケーションのためにQQグループに参加することもできます。 
Apacheライセンス2.0オープンソースライセンス契約
プロジェクトが継続してサポートを期待するために、以下のQRコードをスキャンして、Alipay/Wechatを介してこのプロジェクトに寄付できます。

