Era por volta de 2006, devido aos requisitos do projeto, comecei a entrar em contato com o LWIP, uma pilha de protocolo TCP/IP de código aberto estrangeiro usado em sistemas de microcontroladores, e aproveitei a oportunidade para criar meu primeiro livro impresso no tipo de chumbo - "Design de sistema de rede incorporado - baseado na série Atmel Arm7". A resposta deste livro é muito boa. Muitas pessoas me enviaram o MSN (é uma pena que uma ferramenta de mensagens instantânea tão boa foi abandonada pela Microsoft, e muitos contatos perderam contato) ou perguntas relacionadas à consulta por e -mail. No meu plano de redação original, a publicação deste livro é apenas o começo, e escreverei um segundo livro a seguir - uma introdução do sistema ao transplante, aplicação, design e implementação da pilha do protocolo PPP contido no LWIP. Mas, as coisas foram contra meus desejos, este livro foi adiado e esse salto levou doze anos ...
Se você pensa com cuidado, há duas razões principais para o atraso em primeiro lugar: primeiro, há muito pouco tempo para ser descartável devido à família, trabalho, etc.; Segundo, a falta de conhecimento suficiente e reservas técnicas relacionadas ao protocolo de PPP leva a confiança, medo e estagnação insuficientes. Mas esse incidente sempre foi um arrependimento para mim. Doze anos não são longos nem curtos, mas são suficientes para transformar os arrependimentos em meu coração em uma pequena semente e crescer em uma árvore imponente de sonhos.
Agora, o mundo chegou aos 20 anos quando a epidemia está furiosa. Meu tempo descartável aumentou e minhas capacidades técnicas estão longe de ser comparáveis às do passado. É hora de a Árvore dos Sonhos florescer e dar frutos. Olhando para o início, eu nem havia entrado no setor por alguns anos e tinha recursos técnicos limitados. Eu só podia ficar nos ombros do grande mestre para estudar como transplantar e usar o LWIP, e nem ousei tocar a pilha de PPP. Agora, se continuasse apenas o trabalho de mais de dez anos, essa coisa ficaria sem sentido. Com base em uma compreensão precisa da minha própria força técnica, decidi construir uma pilha completa de protocolo de rede a partir do zero. Finalmente, mais de 6 meses, a pilha de protocolos ONPs (ONPS, a pilha de protocolos de rede aberta) concluiu o desenvolvimento inicial e passou no teste interno. Mais de dez anos de arrependimentos são pagos hoje. Além disso, após mais de 20 anos de experiência, finalmente tenho um sonho de fazer software básico principal em meu coração. Agora, esses dois sonhos também são recompensados.
Quando os novos Orioles estão cantando, haverá inevitavelmente muitas coisas insatisfatórias. O código aberto pode ser compartilhado, compartilhado e estudado com aqueles que gostam de seus interesses. Através desses métodos rigorosos, ele pode ser rapidamente iterado e amadurecido rapidamente, e espera -se que seja comparável ao LWIP.
O ONPS é uma pilha de protocolo de rede doméstica de código aberto e totalmente auto-desenvolvido, adequado para sistemas de microcontroladores com restrição de recursos, fornece uma implementação completa da família Ethernet/PPP/TCP/IP do protocolo e fornece ferramentas de rede como SNTP, DNS e ping. Ele suporta o aplicativo de endereço IP dinâmico do DHCP no ambiente Ethernet e também suporta tabelas de roteamento dinâmico e estático. A pilha de protocolo também encapsula a implementação de uma camada de soquetes de Berkeley. Essa camada não foi projetada e implementada completamente de acordo com o padrão Berkeley Sockets. Em vez disso, com base na minha experiência anterior em programação de soquete, eu redeclare e defino um conjunto de funções de interface de soquete comum com a meta de design de facilitar o uso dos usuários e simplificar a codificação do usuário:
A pilha de protocolo simplifica algumas operações tediosas necessárias para a programação tradicional do soquete BSD e altera alguns detalhes desnecessários da operação para a implementação subjacente, como modelo de seleção/pesquisa, operações de leitura e gravação de bloqueio e não bloqueio. A simplificação não significa derrubar. A definição básica, os principais parâmetros e métodos de uso das funções de interface do soquete não mudaram. Você pode começar rapidamente e usar soquetes de pilha ONPS com base em sua experiência anterior e hábitos de programação. Não há necessidade de prestar muita atenção ao fundo da pilha do protocolo. O uso da programação da API de soquete pode atender totalmente às necessidades de aplicativos de comunicação complexos, em vez de usar seu conjunto personalizado de funções de interface para atingir a mesma meta, assim como o LWIP.
Para se adaptar ao uso de memória extremamente anormal dos sistemas de microcontroladores, a pilha do protocolo ONPS foi considerada como usar zero cópia na gravação no início de seu design. Durante o processo de aprovação de dados no nível do usuário para o protocolo de nível inferior, a pilha do protocolo usa a tecnologia de lista vinculada da lista de buf para vincular-os até que sejam enviados sem qualquer operações de cópia de memória. Além disso, a pilha do protocolo usa o algoritmo de amigos para fornecer funções de gerenciamento de memória dinâmica segura e confiável, a fim de maximizar a utilização da memória durante a operação da pilha do protocolo e minimizar a fragmentação da memória.
Ao contrário dos anos 2000 e início da década de 1910, quando o UCOSII e outros RTOs não eram populares em larga escala nos cenários de aplicação de microcontroladores, e os sistemas de front e back -end ainda eram populares, tornou -se mainstream para os desenvolvedores optarem por usar RTOs na maioria dos cenários de aplicação. Portanto, a pilha de protocolo não suportou os modos de front-end e back-end no início de seu design, e seu design arquitetônico foi baseado nos RTOs populares (RT-thread, UCOSII/III, etc.). A principal tarefa do transplante de pilha de protocolo é naturalmente escrever funções de função relacionadas à camada de adaptação para diferentes TOs. Obviamente, se você tiver cenários de aplicativos extremamente específicos e precisar portar a pilha ONPS para um microcontrolador que adota o modo de frente e back-end, minha sugestão é manter a lógica de processamento de comunicação da camada de protocolo no TCP/UDP e ajustar a arquitetura do sistema de nível superior para se adaptar ao modo de operação do sistema alvo.
O design da pilha ONPS implementa um conjunto completo de modelos de protocolo TCP/IP. Da camada de link de dados à camada IP, à camada TCP/UDP e à camada de soquete de Berkeley acima e, finalmente, a própria camada de aplicativo de comunicação do usuário, a pilha ONPS atinge a cobertura completa da pilha, que pode atender à maioria das necessidades de programação de rede. Sua arquitetura é a seguinte: 
Pode -se observar que não é diferente do modelo de programação de rede tradicional. Os usuários continuam usando a API de soquete para escrever aplicativos comuns de rede TCP e UDP. Ao mesmo tempo, você também pode usar várias ferramentas de rede fornecidas pela pilha do protocolo para executar o tempo de rede, a consulta DNS e outras operações.
| nome | descrever |
|---|---|
| BSD | O arquivo de origem é implementado pela função de interface relevante da camada de soquetes de Berkeley |
| Ethernet | Implementação relacionada Arquivos de origem para famílias de protocolo Ethernet, como Ethernet-II/ARP e Camada EMAC, cliente DHCP, etc. |
| incluir | O arquivo de cabeçalho da pilha do protocolo |
| IP | Os arquivos de origem de implementação relevante do IP e sua família ICMP/TCP/UDP superior |
| mmu | Implementação Relacionada Arquivos de origem do módulo de gerenciamento de memória da pilha de protocolo |
| net_tools | As ferramentas de rede implementam arquivos de origem, como consulta DNS, tempo de rede, ping, telnet, etc. |
| netif | Implementar arquivos de origem para interfaces relacionadas ao cartão de rede e gerenciamento de roteamento |
| porta | Protocolo pilha de arquivos de origem relacionados à migração |
| ppp | PPP Layer Related Implementation Fonte Files, incluindo arquivos de origem de implementação de famílias de protocolo como LCP/IPCP/CHAP/PAP, etc. |
| TCPSERVERVERFORSTACKTESTING | Servidor TCP usado para testes de pilha de protocolo, o IDE é desenvolvido para o VS2015, e o sistema de destino é Win7 e acima |
| test_code | Arquivo de verificação de princípio de discagem PPP em Linux |
A pilha de protocolo suporta MCUS da Mainstream ARM Cortex e suporta IDEs comuns como Keil MDK e IAR. A tarefa principal do transplante é concluir a escrita e adaptação da camada de simulação RTOS. Para obter instruções detalhadas de portas, consulte o artigo "ONPS Network Protocol Stack Migration and Uso Instruções V1.0", clique aqui para baixar. Esta descrição fornece exemplos de portas para duas plataformas de hardware, STM32F103RCT6 e STM32F407VET6. Cada amostra é para RT-Thread e UCOSII RTOs, respectivamente. O projeto de amostra passou por testes internos estritos e pode ser usado diretamente.
Se você não tiver muito tempo ou o projeto de amostra não corresponde à sua plataforma de destino, pode consultar diretamente o documento de orientação geral "Manual de migração de pilha de operações" para migração de pilha de protocolos.
Para documentos gerais de orientação para o desenvolvimento da pilha de protocolos, consulte o "Manual da interface da API de pilha OPS" e o "Manual do usuário da pilha de operações".
Plataforma STM32F407VET6 : amostra de transplante de thread RT-thread UCOS-II Amostra de transplante
Plataforma QINHENG CH32V307 : amostra de transplante de transplante livre de Hongmeng Liteos-M
Você pode visitar o site oficial da pilha ONPS a qualquer momento para obter informações relevantes, como o progresso do desenvolvimento da pilha de protocolos, planos de acompanhamento, a versão mais recente etc.
Se você encontrar algum problema ou sugestão durante o uso, poderá ir à comunidade de comunicação de pilha ONPS para fazer suas sugestões ou perguntas, e o lançamento da nova versão também será notificado imediatamente na comunidade de comunicação.
Você também pode ingressar no grupo QQ para comunicação técnica on -line: 
Contrato de licença de código aberto Apache 2.0
Para que o projeto continue e espere seu apoio, você pode digitalizar o código QR abaixo para doar para este projeto através da Alipay/WeChat:

