chelper: uma biblioteca de extensão do C

chelper

Tem mais ou menos um ano que o chelper foi criado. Na época eu estava desenvolvendo os motores de uma interface gráfica em C para um projeto e tornou-se necessário o uso de vetores, pilhas, strings, FIFOs e de um sistema inteligente de callbacks, que fora inteligentemente baseado no Qt e batizado de Signal Slot. Considerando que esses módulos são frequentemente reescritos a cada projeto decidi criar uma biblioteca de módulos reusáveis e disponibilizá-la como código aberto para terminar de vez com esse ciclo perturbador. Desde lá venho usando o chelper em todos os projetos que permitem e conforme a necessidade novos módulos são criados ou os atuais são expandidos.

http://github.com/felipe-lavratti/chelper

Em resumo, o chelper é uma biblioteca de módulos portáveis e reusáveis para expandir as funcionalidades do C, é open-source e qualquer um pode expandi-lo através do GitHub, contanto que algumas regras sejam obedecidas:

  • testes unitários devem ser escritos para cada operação do módulo, preferencialmente seguindo as recomendações de TDD;
  • os módulos devem ser portáveis, escritos em C89;
  • práticas acordadas de programação devem ser obedecidas assim como código, comentários e documentação sempre em inglês.

Os testes unitários, além do objetivo óbvio, servem para ilustrar o uso dos módulos no lugar de documentações extensivas, e, naturalmente, os módulos devem ser escritos em C portável para que possam rodar em qualquer processador e sistema operacional.

Atualmente o chelper conta apenas com nove módulos, ainda tem muito trabalho pela frente mas esses nove módulos já vão tornar o nosso trabalho de desenvolvedor um pouco mais fácil. Entretanto, como trabalho muito com linux embarcado, os módulos fazem uso frequente de malloc/free, o que pode limitar o seu uso em pequenos microcontroladores, mas essa limitação vai ser contornada com a adaptação dos módulos que deve ocorrer no futuro.

  • Vector: baseado no Vector do C++, usa uma região de memória sequencial para armazenar os itens, gerenciando automaticamente eventuais expansões.
  • Ring FIFO: implementa uma FIFO em anel convencional.
  • Fast Ring FIFO: implementa uma FIFO em anel apenas com defines e inlines, o número de itens precisa ser múltiplo de 2^n.
  • String: módulo básico de string baseado no C++, mas usa um Vector como gerenciador da lista de caracteres.
  • Signal Slot: baseado no Qt, usa um Vector para armazenar a lista de slots. Como não é possível usar argumentos variáveis nesse sistema, vai ser repetido de acordo com a assinatura dos slots.
  • Number: Auxiliar numérico, atualmente é redundante ao ctype.h.
  • Timeout: Computador de timeouts, atualmente é dependente time.h do posix, mas pode ser facilmente adaptado para usar um timer ou relógio de microcontrolador. Deve ser renomeado para pTimeout
  • Log: Sistema de mensagens de log, dependente do posix, usa o syslog e precisa de revisão de suas funcionalidades.

Por fim, fica registrado o convite a todos os interessados em usar e abusar dessa biblioteca, e, aqueles que se identificarem com a ideia de contribuir com o chelper, entrem em contato!

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

[wpseo_breadcrumb]
Comentários:
Notificações
Notificar
guest
1 Comentário
recentes
antigos mais votados
Inline Feedbacks
View all comments
Leonardo José Consoni
Leonardo José Consoni
15/08/2016 21:14

Não seria interessante tentar submeter algumas das funcionalidades que você criou para serem incorporadas à Klib (https://github.com/attractivechaos/klib) ?

Talvez você goste:

Séries

Menu
Privacy Settings saved!
Configurações de Privacidade

Entenda quais dados e informações usamos para ter melhor entrega de conteúdo personalizado para você.

These cookies are necessary for the website to function and cannot be switched off in our systems.

Para usar este site, usamos os seguintes cookies tecnicamente exigidos

  • wordpress_test_cookie
  • wordpress_logged_in_
  • wordpress_sec

Decline all Services
Accept all Services