BRTOS 1.75 + LwIP, a pilha de protocolos TCP/IP mais famosa do código open source
Após um longo período sem grandes novidades temos o prazer de anunciar o porte do BRTOS para o LwIP !!! A muito tempo vinhamos pensando em disponibilizar este porte do BRTOS para um dos mais famosos stacks TCP/IP existentes para sistemas embarcados. Essa idéia saiu do papel quando nosso grande amigo e colaborador, Sérgio Prado do blog http://sergioprado.org/, anunciou um curso de FreeRTOS que, entre outros assuntos, iria abordar o porte do FreeRTOS para o LwIP. Apesar de ser um ótimo curso, o que mais nos chamou a atenção era o kit utilizado no curso, pois possuíamos este kit para testes do BRTOS. Assim, poderíamos testar o porte com os mesmos drivers. Não perdi tempo e contatei o Sérgio pedindo o projeto de demonstração para ter acesso aos drivers e prontamente, como sempre, recebi sua ajuda.
Com os drivers em mãos iniciamos o porte, encontrando algumas dificuldades no início. O porte exigia recursos ainda não disponíveis no BRTOS, como passar parâmetros na instalação de tarefas e filas com tipos variáveis e, com suporte a desalocação. Surgiu então a versão 1.75 do BRTOS com estas funcionalidades. Após alguns testes o porte pode prosseguir e foi concluído. Mas antes de continuarmos, o que é exatamente o LwIP?
O lwIP é uma implementação mais leve da pilha de protocolos TCP/IP para sistemas embarcados. Foi desenvolvido por Adam Dunkels no laboratório de computação do Instituto Suíço de Ciência da Computação, e hoje é mantido pela comunidade open source. É código aberto, desenvolvido em C e liberado sob a licença BSD, sendo disponibilizado em:
http://savannah.nongnu.org/projects/lwip/
O LwIP consome poucos recursos (em torno de 20K a 40K de RAM (dados) e cerca de 40K de ROM / FLASH (código)). Suas principais funcionalidades são:
- IP (Internet Protocol) including packet forwarding over multiple network interfaces
- ICMP (Internet Control Message Protocol) for network maintenance and debugging
- UDP (User Datagram Protocol) including experimental UDP-lite extensions
- TCP (Transmission Control Protocol) with congestion control, RTT estimation and fast recovery/fast retransmit
- Specialized raw API for enhanced performance
- Optional Berkeley-alike socket API
- DHCP (Dynamic Host Configuration Protocol)
- PPP (Point-to-Point Protocol)
- ARP (Address Resolution Protocol) for Ethernet
O LwIP precisa ser portado para a plataforma em que será utilizado. O porte pode ser realizado tanto em projetos com sistema operacional quanto em sistemas sem sistema operacional. Informações de como portar o LwIP estão disponíveis em:
http://lwip.wikia.com/wiki/LwIP_Platform_Developers_Manual
O demo do porte foi desenvolvido para o kit TWR-K60N512-kit da Freescale, no ambiente de desenvolvimento CodeWarrior 10.2.
Este kit conta com um microcontrolador da linha Kinetis da Freescale, um ARM Cortex-M4 rodando a 100MHz (96MHz no demo), com 512K de flash e 128K de SRAM. O demo possui ainda demonstrações da USB emulando uma porta serial com um terminal, acesso a cartão SD com sistema de arquivos FAT32, acelerômetro e botões capacitivos. Tudo isso sendo executado concorrentemente !!!