- 1. Desenvolvimento de Requisitos do Produto
- 2. Design de sistema e desenvolvimento de algoritmo
- 3. Codificação para Firmware Embutido
- Testando Firmware Embutido
O desenvolvimento de software é geralmente difícil, mas para um sistema embarcado, ele está em um nível de dificuldade totalmente novo. Os desenvolvedores de firmware precisam ter um bom conhecimento sobre o desenvolvimento de hardware e entender o funcionamento interno de um processador embarcado. Para o artigo de hoje, estarei compartilhando ferramentas e dicas que podem ser usadas para alcançar um alto nível de eficiência e eliminar algumas das coisas que tornam o desenvolvimento de firmware tedioso.
O desenvolvimento de software embarcado passa pelo processo de desenvolvimento semelhante ao desenvolvimento de software "comum". Independentemente do modelo de desenvolvimento / gerenciamento adotado, o Desenvolvimento de Software Embarcado geralmente envolve as etapas abaixo:
- Desenvolvimento de requisitos do produto
- Projeto de Sistema e Desenvolvimento de Algoritmo
- Codificação
- Testando
Vamos examinar algumas das dificuldades que vêm com esses estágios e algumas das ferramentas que podem aumentar a eficiência e a produtividade.
1. Desenvolvimento de Requisitos do Produto
As especificações do produto geralmente são feitas pensando nos projetistas da placa. Geralmente contém poucas informações que poderiam ajudar no desenvolvimento de firmware, portanto, o desenvolvedor de software embutido acaba com um documento com 250 páginas (média) que não pode ser usado para referências e se não for considerado cuidadosamente pode facilmente levar a descuidos no design que, por sua vez,, levará à extensão do prazo do projeto, se não à falha geral do projeto. Os documentos raramente contêm informações sobre registros ou seus campos de bitsentre outras coisas, e isso custa aos desenvolvedores de firmware várias horas de trabalho enquanto eles pesquisam o documento para identificar coisas como qual registro pertence a qual grupo e qual campo de bit pertence a qual registro. Abaixo estão algumas dicas que podem ser consideradas para garantir o desenvolvimento de documentos de especificação de projeto mais úteis.
Uso de descrições de registro
Conforme discutido acima, os desenvolvedores de firmware precisam entender os meandros de todos os registros, memórias, etc. de todos os elementos de controle (CPU, MCU, etc.) em um projeto para poder controlar efetivamente todas as partes do sistema. Para colocar isso em prática, os desenvolvedores de firmware podem garantir que o documento de especificação contenha uma descrição adequada dos registros junto com os mapas de memória. Todos os registros no elemento de controle podem receber um nome distinto que os torna fáceis de identificar em todo o documento e podem ser todos vinculados de modo que levem a uma lista dentro do documento que indica o nome, localização, bloco e endereço de cada registro.
Descrições de Tarefas
Outra maneira de tornar os documentos de especificação úteis para desenvolvedores de software embarcado é descrevendo o que cada bloco deve fazer e como deve fazê-lo. Também nesta fase, deve haver planos para o tratamento de erros em cada bloco. Essencialmente, parece que o desenvolvedor do firmware está dizendo; “Quando eu chegar aqui, sou para fazer isso, isso e isso, garantindo que isso, isso e aquilo, não aconteça”. Isso ajuda a orientar o trabalho do desenvolvedor e a avaliar o projeto antes mesmo do design começar para identificar possíveis erros e bugs, economizando tempo e dinheiro preciosos.
Existem outros fatores, incluindo a estrutura do documento, o uso de fontes fáceis de ler (algo com que os desenvolvedores podem trabalhar mesmo quando estão cansados), gráficos e imagens sempre que possível, o que pode aumentar a eficiência da equipe de firmware após este estágio.
2. Design de sistema e desenvolvimento de algoritmo
Esta etapa envolve o desenvolvimento dos pseudocódigos, fluxogramas, máquinas de estado e tudo que está envolvido com o projeto do que o firmware. Para este estágio, várias ferramentas podem ser usadas para ajudar a organizar pensamentos, explorar software legado / previamente escrito em torno do projeto e desenvolver seu próprio fluxograma, máquina de estado etc. Algumas dessas ferramentas são discutidas abaixo.
PIMs
Nesse estágio do desenvolvimento do produto, os desenvolvedores tendem a rabiscar muito à medida que reúnem recursos no projeto de links da web a fórmulas etc. Uma das melhores maneiras de manter o controle dessas informações para que sejam úteis posteriormente é por meio do uso do PIM (gerenciamento de informações do produto) ferramentas. Existem vários PIMs por aí, mas mencionarei alguns com alguns recursos excelentes.
1. Evernote
O Evernote ajuda você a fazer anotações que estão disponíveis em qualquer plataforma para que você possa verificar as anotações feitas em seu PC enquanto estava no ônibus para casa. As notas são bem organizadas e completamente pesquisáveis para que você sempre encontre o que precisa.
2. TrunkNote
Trunk note é um aplicativo de anotações do tipo Wiki. Ele traz todo o poder organizacional dos wikis para fazer anotações. É um aplicativo baseado em telefone celular, mas pode ser facilmente sincronizado com um PC via WIFI.
Outros tipos de PIMs como Tiddlywiki etc. Cada um deles vem com recursos que podem torná-lo mais atraente para indivíduos específicos e podem fazer algumas amostragens antes de você finalmente decidir por um.
Compreendendo o código legado
Outro grupo de ferramentas muito úteis durante a fase de projeto são as ferramentas para a compreensão de códigos legados. Em situações em que o produto sendo projetado é uma versão aprimorada de um produto anterior, o desenvolvedor pode achar útil revisar o trabalho que já foi feito para obter algumas idéias e talvez pedaços de código para este novo projeto. Este pode ser um longo caminho, especialmente se você não fez parte da equipe que construiu o software anterior. Existem vários softwares que ajudam a construir árvores, criar documentação e fluxogramas a partir de códigos já escritos.
1. Doxygen
O Doxygen é uma ferramenta bastante poderosa que ajuda a criar documentação a partir dos códigos-fonte. Ele foi projetado principalmente para funcionar com C ++, mas também funciona com C, Python e algumas outras linguagens. Ele tem a capacidade de extrair a estrutura do código de qualquer código, fornecendo gráficos de dependência gerados automaticamente e diagramas de herança para ajudar a visualizar o código.
2. Graphviz
De acordo com seu site, o graphviz ajuda a apresentar informações estruturais como diagramas de gráficos abstratos e redes. Ele pode ser usado junto com o Doxygen para entender melhor os gráficos produzidos por ele.
3. Srecord
Srecord é uma ferramenta poderosa para manipular imagens de firmware e converter entre diferentes formatos de arquivo. Ele pode ser usado para calcular e fazer CRCs e Checksums em blocos de bytes, corrigir arquivos de erro criados devido a conjuntos de ferramentas cheios de erros e filtrar ou mover seções de arquivos, entre outras coisas. Mais informações sobre seu uso podem ser encontradas na página do SourceForge.
Algumas outras ferramentas que se enquadram nesta categoria são CrystalRev e Hexplorer, entre outras.
Desenvolvendo Algoritmos
Todas as pesquisas e anotações se agregam ao desenvolvimento de algoritmos que se transformam em pseudocódigos e fluxogramas para o projeto. Existem várias ferramentas para desenvolver fluxogramas e, embora a maioria delas não seja exclusiva para o desenvolvimento de firmware, elas fornecem recursos úteis e importantes que simplesmente executam o trabalho e também ajudam a manter os gráficos ao longo do ciclo de desenvolvimento do produto. Abaixo estão algumas das melhores ferramentas para fluxogramas.
1. QFSM
QFSM é uma ferramenta gráfica para projetar e simular máquinas de estado finito. Sua capacidade de simular os projetos o torna muito melhor do que a maioria dos outros softwares neste grupo. É particularmente útil quando você está projetando máquinas de estado para FPGA e hardware de destino semelhante.
2. Lucid Chart
Lucid chart é sem dúvida o melhor e mais flexível software de fluxograma que existe. É baseado na web e possui recursos de equipe que permitem trabalhar entre vários dispositivos e colaborar em tempo real com colegas de equipe.
3. Microsoft Visio
Visio é uma das melhores ferramentas gráficas atualmente. Possui uma série de objetos de diferentes campos que tornam mais fácil descrever qualquer coisa. No entanto, ele não vem com recursos que aprimoram a colaboração entre as equipes e só pode ser usado em uma máquina Windows na qual está instalado.
4. Apresentações Google
Uma das coisas mais importantes no desenvolvimento de produtos no mundo de hoje é o uso de ferramentas que permitem que as equipes colaborem com eficácia de onde quer que estejam, e isso é algo que os slides do Google trazem a bordo. Ele pode ser usado para desenvolver todos os tipos de gráficos, de fluxogramas de software a organogramas e mapas mentais. É baseado na nuvem e funciona em quase todos os navegadores populares.
Existem várias outras ferramentas para a criação de fluxogramas e desenvolvimento de algoritmos gerais, como de costume, cada uma com seus prós e contras.
3. Codificação para Firmware Embutido
Tudo o que foi mencionado até este ponto conduz aqui. No mundo dos SDKs e IDEs, a escolha de ferramentas neste estágio depende do dispositivo de destino e dos recursos a serem integrados ao dispositivo, por esse motivo, excluirei da discussão SDKs e IDEs populares como MPLAB, etc. a ferramentas que são mais complementares por natureza.
1. QT (desenvolvimento de GUI)
Monitores (interativos ou não) são os meios mais populares para fornecer feedback aos usuários atualmente e o SDK do QT é um dos melhores que existem e provavelmente não é estranho para ninguém dentro do círculo incorporado. Ele fornece recursos de "arrastar e soltar" que facilitam o desenvolvimento de aplicativos complexos baseados em GUI para dispositivos incorporados, independentemente da plataforma de destino ou da linguagem de programação usada para o desenvolvimento geral do projeto. Basicamente, elimina o estresse associado ao uso de código para criar interfaces de usuário.
2. (Prototipagem Rápida)
Um dos maiores gargalos no desenvolvimento de software embarcado é o fato de que o hardware geralmente não está disponível para testar coisas em trânsito, enquanto o software está sendo desenvolvido. Freqüentemente, quando ele está disponível, os desenvolvedores de firmware precisam esperar todo o tempo que o hardware leva para ficar pronto para fazer pouco ou nada. Isso aumenta o prazo de entrega e não cria espaço para o tipo de sincronização entre os engenheiros de hardware e os desenvolvedores de firmware que teria aumentado a qualidade do produto. Para ajudar a resolver este problema, os caras da VaST criaram uma plataforma de prototipagem virtual de nível de sistemas eletrônicos que poderia ser usada para criar um protótipo de hardware virtual no qual o software embutido pode ser executado para determinar o desempenho dos sistemas antes que o hardware esteja pronto.
3. Doxygen (documentação)
Uma das partes mais importantes da escrita de qualquer código é a documentação e uma das ferramentas mais populares para isso é o Doxygen. Além de seu uso para entender o software legado, o Doxygen tem a capacidade de extrair comentários automaticamente de um código e criar a documentação que o inclui. As estruturas do Doxygen incluem arquivos graficamente e criam referências para cada função, variável e macro usadas em seu código. Fluxogramas e diagramas de fluxo de dados também podem ser incorporados na documentação, combinando Doxygen com graphviz.
4. GIT (Sistemas de Controle de Versão)
É difícil acreditar que alguém desenvolva software de qualquer tipo sem algum tipo de sistema de controle de versão hoje em dia, mas caso você faça isso, é uma ideia muito ruim que pode levar a erros que custarão tempo e dinheiro. O Git se destaca entre todas as ferramentas de controle de versão por vários motivos. É open source, rápido, eficiente e principalmente local. Além do Git, ferramentas como o subversion também merecem ser mencionadas.
Testando Firmware Embutido
O teste é uma parte importante do processo de desenvolvimento para qualquer coisa. As empresas perdem milhares de dólares quando os dispositivos são devolvidos devido a erros de firmware, portanto, é uma parte do desenvolvimento que deve ser levada muito a sério. Geralmente é feito, de mãos dadas, com a codificação e o primeiro conjunto de ferramentas para teste de código, são provavelmente os depuradores dentro do IDE ou SDK sendo usados para o projeto. O teste vem em diferentes formas e é realizado em diferentes estágios, como tal, envolve diversos tipos de ferramentas. As ferramentas de teste formam o desenvolvimento de firmware que vai da validação do projeto até a análise estática e ferramentas de teste de tempo de execução. Abaixo estão algumas ferramentas que considero realmente úteis.
1. Crystal REV
Crystal revs é uma ferramenta para estudar código. Ele pode ser usado para gerar fluxogramas a partir de código C / C ++, o que o torna uma ótima ferramenta para revisar seu próprio código e ver se o projeto preliminar é o que foi implementado. Com o crystal rev, você poderá ver rapidamente a diferença entre o design e a implementação. Sua capacidade de gerar fluxogramas, dados e fluxo de chamadas a partir de códigos também o torna uma ferramenta útil para analisar código legado.
2. PC- Lint
O PC-lint é uma das ferramentas de teste de firmware mais antigas do mercado. Ele é capaz de analisar software para identificar bugs, vulnerabilidades de segurança e garantir que o código foi escrito de acordo com os padrões da indústria. Ferramentas semelhantes incluem polyspace e LRDA, Eggplant e Tessy, entre outras.
3. Wireshark
Isso é útil ao construir dispositivos de rede. É essencialmente um sniffer de pacote e pode ajudar a visualizar os dados que seu dispositivo está transmitindo. Isso pode ajudar a proteger o dispositivo.
4. Driver de porta serial virtual
O VSPD da eltima software é uma ferramenta que recentemente também fui apresentada por um amigo. É muito útil ao trabalhar com drivers de dispositivos e outros desenvolvimentos relacionados à porta de comunicação. A porta de comunicação serial virtual oferece a capacidade de testar o comportamento das portas de comunicação sem o dispositivo de destino. Você pode criar um número ilimitado de portas que é capaz de emular todas as configurações de portas de comunicação reais. O software também vem com recursos como divisão de porta serial, fusão de portas Com, uso de conexões de porta com pacote, entre outros recursos interessantes.
É isso para este artigo, obrigado por reservar um tempo para ler. Embora seja impossível listar todas as ferramentas que existem, espero que algumas dessas ferramentas sejam úteis.