C'était vers 2006, en raison des exigences du projet, j'ai commencé à contacter LWIP, une pile de protocole TCP / IP open source étrangère utilisée dans les systèmes de microcontrôleur, et j'ai profité de cette occasion pour créer mon premier livre imprimé en type de plomb - "Conception du système de réseau embarqué - basé sur la série ATMEL ARM7". La réponse de ce livre est assez bonne. Beaucoup de gens m'ont envoyé MSN (il est dommage qu'un si bon outil de messagerie instantanée ait été abandonné par Microsoft, et de nombreux contacts perdus) ou des questions liées à la consultation par e-mail. Dans mon plan d'écriture original, la publication de ce livre n'est que le début, et j'écrirai un deuxième livre ensuite - une introduction système à la greffe, l'application, la conception et la mise en œuvre de la pile de protocole PPP contenue dans LWIP. Mais, les choses sont allées à l'encontre de mes souhaits, ce livre a été retardé, et ce saut a pris douze ans ...
Si vous y réfléchissez attentivement, il y a deux raisons principales pour le retard en premier lieu: d'abord, il y a trop peu de temps pour être jetable en raison de la famille, du travail, etc.; Deuxièmement, le manque de connaissances et de réserves techniques suffisantes liées au protocole PPP conduit à une confiance, à la peur et à la stagnation insuffisantes. Mais cet incident a toujours été un regret pour moi. Douze ans ne sont ni longs ni courts, mais ils suffisent à transformer les regrets de mon cœur en une petite graine et à devenir un arbre de rêves imposant.
Maintenant, le monde est arrivé dans les années 20 lorsque l'épidémie fait rage. Mon temps jetable a augmenté et mes capacités techniques sont loin d'être comparables à celles du passé. Il est temps pour l'arbre des rêves de s'épanouir et de porter des fruits. En regardant en arrière au début, je ne suis même pas entré dans l'industrie pendant quelques années et j'avais des capacités techniques limitées. Je ne pouvais que rester sur les épaules du grand maître pour étudier comment transplanter et utiliser LWIP, et je n'ai même pas osé toucher la pile PPP. Maintenant, si cela ne continuait que le travail il y a plus de dix ans, alors cette chose serait dénuée de sens. Sur la base d'une compréhension précise de ma propre force technique, j'ai décidé de créer une pile de protocole de réseau complète à partir de zéro. Enfin, sur 6 mois, la pile de protocole ONPS (ONPS, Open Net Protocol Stack) a terminé le développement initial et réussi le test interne. Plus de dix ans de regrets sont payés aujourd'hui. De plus, après plus de 20 ans d'expérience, j'ai enfin rêvé de faire de base des logiciels de base dans mon cœur. Maintenant, ces deux rêves sont également récompensés.
Lorsque les nouveaux Orioles chantent pour la première fois, il y aura inévitablement de nombreuses choses insatisfaisantes. L'open source peut être partagé, partagé et étudié avec ceux qui aiment leurs intérêts. Grâce à ces méthodes strictes, il peut être rapidement itéré et mûri rapidement, et il devrait être comparable à LWIP.
ONPS est une pile de protocole de réseau domestique open source et entièrement développée, adaptée aux systèmes de microcontrôleurs à base de ressources, fournit une implémentation complète de la famille du protocole Ethernet / PPP / TCP / IP, et fournit des outils de réseau tels que SNTP, DNS et Ping. Il prend en charge l'application d'adresse IP dynamique DHCP dans un environnement Ethernet et prend également en charge les tables de routage dynamiques et statiques. La pile de protocole résume également la mise en œuvre d'une couche Berkeley Sockets. Cette couche n'est pas conçue et implémentée complètement selon la norme Berkeley Sockets. Au lieu de cela, sur la base de mon expérience de programmation de socket précédente, je redéclate et définit un ensemble de fonctions d'interface de socket communes avec l'objectif de conception de faciliter l'utilisation et la simplification du codage utilisateur:
La pile de protocole simplifie certaines opérations fastidieuses requises pour la programmation traditionnelle de socket BSD, et modifie certains détails de fonctionnement inutiles à l'implémentation sous-jacente, tels que le modèle SELECT / Poll, les opérations de lecture et d'écriture de lecture et non bloquantes. La simplification ne signifie pas le renversement. La définition de base, les paramètres principaux et les méthodes d'utilisation des fonctions d'interface de socket n'ont pas changé. Vous pouvez rapidement démarrer et utiliser des sockets de pile ONPS en fonction de votre expérience antérieure et de vos habitudes de programmation. Il n'est pas nécessaire de prêter trop d'attention au bas de la pile de protocole. L'utilisation de la programmation API de socket peut répondre pleinement aux besoins des applications de communication complexes, plutôt que d'utiliser son ensemble personnalisé de fonctions d'interface pour atteindre le même objectif, tout comme LWIP.
Afin de s'adapter à l'utilisation de la mémoire extrêmement anormale des systèmes de microcontrôleurs, la pile du protocole ONPS a été considérée comme utilisation de copie nulle sur l'écriture au début de sa conception. Pendant le processus de transmission des données au niveau de l'utilisateur au protocole de niveau inférieur, la pile de protocole utilise la technologie de liste liée à la liste BUF pour les relier jusqu'à ce qu'elles soient envoyées sans aucune opération de copie de mémoire. De plus, la pile de protocole utilise un algorithme Buddy pour fournir des fonctions de gestion de mémoire dynamique sécurisées et fiables, afin de maximiser l'utilisation de la mémoire pendant le fonctionnement de la pile de protocole et de minimiser la fragmentation de la mémoire.
Contrairement aux années 2000 et au début des années 1910, lorsque l'UCOSII et d'autres RTO n'étaient pas populaires à grande échelle dans les scénarios d'application des microcontrôleurs, et les systèmes avant et backend étaient toujours populaires, il est devenu courant que les développeurs choisissent d'utiliser des RTO dans la plupart des scénarios d'application. Par conséquent, la pile de protocole n'a pas pris en charge les modes frontaux et back-end au début de sa conception, et sa conception architecturale était basée sur les RTO populaires (RT-thread, UCOSII / III, etc.). La tâche principale de la transplantation de pile de protocole est naturellement d'écrire des fonctions de fonctions de couche d'adaptation du système d'exploitation pour différents TO. Bien sûr, si vous avez des scénarios d'application extrêmement spécifiques et que vous devez porter la pile ONPS vers un microcontrôleur qui adopte le mode avant et backend, ma suggestion est de conserver la logique de traitement de la communication de la couche de protocole sous TCP / UDP, et d'ajuster l'architecture du système supérieur supérieur pour s'adapter au mode de fonctionnement du système cible.
La conception de la pile ONPS implémente un ensemble complet de modèles de protocole TCP / IP. De la couche de liaison de données à la couche IP, à la couche TCP / UDP et à la couche de socket Berkeley ci-dessus, et enfin la couche d'application de communication de l'utilisateur, la pile ONPS obtient une couverture complète de la pile, qui peut répondre à la plupart des besoins de programmation réseau. Son architecture est la suivante: 
On peut voir qu'il n'est pas différent du modèle de programmation de réseau traditionnel. Les utilisateurs continuent d'utiliser l'API Socket pour écrire des applications réseau TCP et UDP courantes. Dans le même temps, vous pouvez également utiliser plusieurs outils réseau fournis par la pile de protocole pour effectuer une synchronisation réseau, une requête DNS et d'autres opérations.
| nom | décrire |
|---|---|
| BSD | Le fichier source est implémenté par la fonction d'interface pertinente de la couche Berkeley Sockets |
| Ethernet | Fichiers source de mise en œuvre connexes pour les familles du protocole Ethernet telles que Ethernet-II / ARP et EMAC Couche, client DHCP, etc. |
| inclure | Le fichier d'en-tête de pile de protocole |
| IP | Les fichiers source d'implémentation pertinents de l'IP et de sa famille de protocole ICMP / TCP / UDP supérieure supérieure |
| MMU | Fichiers source d'implémentation connexe du module de gestion de la mémoire de la pile de protocole |
| net_tools | Les outils réseau implémentent des fichiers source, tels que la requête DNS, la synchronisation réseau, le ping, le telnet, etc. |
| metif | Implémentez les fichiers source pour les interfaces liées à la gestion des cartes réseau et à la gestion du routage |
| port | Fichiers source liés à la migration de pile de protocole |
| PPP | Fichiers source d'implémentation liés aux liens PPP, y compris les fichiers source d'implémentation de familles de protocoles telles que LCP / IPCP / CHAP / PAP, etc. |
| TCPSERVERFORSTACKTESTING | Serveur TCP utilisé pour les tests de pile de protocole, IDE est développé pour VS2015, et le système cible est Win7 et supérieur |
| test_code | Fichier de vérification du principe PPP sous Linux |
La pile de protocole prend en charge les MCU de la série ARM traditionnelle ARM et prend en charge les IDE communs tels que Keil MDK et IAR. La tâche principale de la transplantation est de terminer l'écriture et l'adaptation de la couche de simulation RTOS. Pour les instructions de portage détaillées, veuillez vous référer à l'article "ONPS Network Protocol Stack Migration and Utilising Instructions v1.0", cliquez ici pour télécharger. Cette description fournit des exemples de portage pour deux plates-formes matérielles, STM32F103RCT6 et STM32F407VET6. Chaque échantillon est pour RT-thread et UCOSII RTOS respectivement. Le projet d'échantillon a subi des tests internes stricts et peut être utilisé directement.
Si vous n'avez pas beaucoup de temps ou si l'exemple de projet ne correspond pas à votre plate-forme cible, vous pouvez directement vous référer au document de guidage général "OPS Stack Migration Manual" pour la migration de pile de protocole.
Pour les documents d'orientation générale pour le développement de la pile de protocole, veuillez vous référer au "Manuel de l'interface API OPS Stack" et au "Manuel d'utilisation de la pile OPS".
Plateforme STM32F407VET6 : échantillon de transplantation RT-thread échantillon UCOS-II
Plateforme Qinheng CH32V307 : échantillon de transplantation de transplantation Hongmeng LiteOS-M échantillon de transplantation RT-thread
Vous pouvez visiter le site officiel de la pile ONPS à tout moment pour obtenir des informations pertinentes telles que la progression du développement de la pile de protocole, les plans de suivi, la dernière version, etc.
Si vous rencontrez des problèmes ou des suggestions pendant l'utilisation, vous pouvez vous rendre à la communauté de la communication ONPS Stack pour faire vos suggestions ou questions, et la publication de la nouvelle version sera également informée immédiatement dans la communauté de la communication.
Vous pouvez également rejoindre le groupe QQ pour la communication technique en ligne: 
Contrat de licence open source d'Apache 2.0
Pour que le projet continue et attendez votre support, vous pouvez scanner le code QR ci-dessous pour faire un don à ce projet via Alipay / WeChat:

