Gostaria de receber algumas dicas para quem deseja se tornar um bom desenvolvedor de software incorporado ou deseja melhorar nessa área.
O que preciso aprender sobre hardware, software?
Quais livros são mais recomendados? Blogs?
No final, como eu poderia passar de um hobby para iniciantes a um excelente profissional?
Para livros, recomendo pesquisar na história. A maioria das técnicas de software embarcadas de hoje vem da ponta sangrenta do passado.
Como qualquer coisa, pratique diariamente.
fonte
As outras respostas são ótimas, mas a maior diferença entre um hobby e um profissional deve ser uma mentalidade de qualidade. Portanto, faça seu projeto avançar, não pare quando terminar 80% de um projeto. Leve-o até o fim, prove que está funcionando e documente-o corretamente.
Verifique se o seu código é legível e pode ser mantido.
E não se esqueça de se divertir também :)
fonte
Além do óbvio, como aprender C e começar com alguma placa de desenvolvedor, você deve aprender a ler as folhas de dados do microcontrolador .
Os fabricantes adicionam cada vez mais recursos aos microcontroladores, que, portanto, tornam-se cada vez mais complexos. A folha de dados não fornece apenas características elétricas (o que é mais interessante para o engenheiro eletrônico do que o desenvolvedor de software), mas também uma descrição detalhada de registros, mapas de memória etc.
Na primeira leitura, uma folha de dados pode parecer assustadora, mas não os compreende. pode causar uma dor de cabeça mais grave na fase de depuração.
fonte
'Incorporado' é um termo meio carregado.
Em alguns aspectos, qualquer sistema dedicado à execução de um único aplicativo pode ser chamado de sistema incorporado, desde que haja algum hardware a ser controlado. É possível chamar um PPC604 de 400 MHz com 2 GB de RAM executando um aplicativo java no Linux como um sistema incorporado, se estiver controlando um processo por meio de módulos de E / S locais. Por outro lado, um arduino apenas executando algum tipo de aplicativo de rede mínimo não seria muito um sistema incorporado. Mas provavelmente "incorporado" faz com que a maioria das pessoas pense em controladores baseados em flash com apenas algumas centenas de bytes de RAM, sem sistema operacional para falar e uma infinidade de periféricos no chip.
Dito isto, provavelmente os dois maiores obstáculos que os programadores não incorporados geralmente enfrentam nos sistemas embarcados de aprendizado são os registros e interrupções de E / S.
As interrupções podem, na verdade, ser o mais fácil dos dois conceitos para os programadores não incorporados lidarem, uma vez que os principais problemas com esses programas, concorrência e programação orientada a eventos, são frequentemente encontrados em aplicativos comuns. O que torna as interrupções um problema é perceber a extrema sensibilidade de um sistema à qualidade de seu manuseio de interrupções e os meandros de lidar com o hardware para limpar a condição de interrupção e configurar o próximo. Com uma GUI, um impasse mata apenas o aplicativo. Com um manipulador de interrupções, um impasse faz com que todo o sistema seja bloqueado.
Os dispositivos de E / S parecem ser a área que causa mais dificuldade. Para os não iniciados, pode ser uma surpresa descobrir que a leitura desse registro aqui afeta esse registro ali . Escrevendo 1 para limpar bits. Bits de status que se limpam quando você lê um registro de dados, etc. Há tantas possibilidades com o hardware de E / S que não há regra geral para lidar com ele, exceto para aprender a encontrar e interpretar as folhas de dados do dispositivo. Escrever um driver de dispositivo para uma porta serial lhe ensinará muito sobre programação de E / S de baixo nível.
Realmente, não há substituto para aprender essas coisas do que arregaçar as mangas e programar alguma linguagem C e / ou assembly reta no metal puro. Mesmo o sistema embarcado baseado em java mencionado, eventualmente, precisa de um driver de dispositivo para a E / S, e isso significa, finalmente, lidar com alguns C. A experiência é o melhor professor. Escolha um microcontrolador, seja MSP430, TMS320, AVR, ARM, PIC, 68HC11, qualquer que seja, encontre um kit de avaliação e construa alguns sistemas.
fonte
O que você deseja aprender aqui é o assembler para várias plataformas. C. Interação C e assembler. Diferentes ferramentas GCC e não GCC. Como ler uma referência de folha de dados / programadores (e perceber que todos eles têm alguns erros ou podem ser enganosos, nunca confie neles, o hardware vence os documentos) e como ler ou usar um esquema. Esses esquemas não são complicados normalmente. Várias placas são boas para a interface em projetos, o que significa que elas não têm lixo na placa, apenas acesso direto aos pinos de E / S. Mas isso não é o melhor para aprender. Algo como um StellarisO quadro que é doloroso para os projetos tem muitas coisas divertidas para aprender a incorporar e aprender a emprestar / usar drivers ou escrever suas próprias folhas de dados. A borboleta Atmel AVR também é uma boa placa, se ainda estiver disponível, pode precisar ser soldada em sua própria porta serial para programá-la ou apenas congestionar alguns fios nos orifícios. O que ele oferece é alguns periféricos que você pode aprender a programar.
Mesmo que você acabe fazendo um trabalho incorporado que envolva a gravação de aplicativos usando chamadas SDK ou API no linux ou em um RTOS (nunca tocando em hardware ou lendo folhas de dados), o conhecimento acima ainda o colocará à frente do resto.
fonte
Este artigo (traduzido automaticamente do português para o inglês) tem uma boa visão geral do desenvolvimento de uma carreira como desenvolvedor de software incorporado. Nota: O original está aqui .
Começa descrevendo as esferas do conhecimento que você deve desenvolver:
Em seguida, fornece as seguintes dicas para dominar essas áreas (e as desenvolve com mais texto, estes são apenas os títulos):
fonte
Pense duas vezes antes de se tornar um engenheiro de software incorporado. Eu tive fases na minha carreira. Desenvolvi software nos primeiros 5 anos, depois da mudança para vendas / marketing, fiz isso por 15 anos, gerenciei um negócio de mais de 100 milhões de dólares e agora estou de volta ao software.
Quando volto ao software após 15 anos, lembro por que saí em primeiro lugar. É difícil. Ele precisa de concentração, várias centenas de linhas de código se tocando e todos vocês precisam mantê-lo na memória. Incorporado é particularmente difícil.
Você também precisa se entender. Se você é geralmente um cara inteligente, meticuloso e paciente, você seria um grande engenheiro. Se estiver faltando algum desses, você terá uma média na melhor das hipóteses. Pense sobre isso. Se você é ultra inteligente e não paciente, não vale muito porque, por mais inteligente que seja, uma boa engenharia exige paciência e atenção aos detalhes.
Você também precisa se sentir confortável observando as horas de código por vez sem falar. Observo que pessoas com boas habilidades sociais acham isso insuportável.
Se tudo isso der certo, leia todos esses ótimos livros, faça os exercícios e você será um grande engenheiro. Boa sorte
fonte
Todo mundo diz grandes coisas. Então, eu vou lhe dar conselhos gerais: leia leia leia leia leia leia leia leia!
Leia todos os artigos em http://embeddedgurus.com Se você não entende alguma coisa, pesquise. Se, na explicação dessas coisas, você encontrar algo que não entende, leia mais. Estou prestes a entrar em uma posição de software embarcado e minha experiência é um punhado de projetos profissionais nos últimos anos e muita leitura. A experiência permite que você tente as coisas, mas a leitura permite saber se as coisas que você tentou já foram feitas antes, talvez melhores do que você. Ele apresenta conceitos com os quais você pode trabalhar em qualquer circunstância.
Apenas leia!
fonte
Torne-se um especialista em C Compreenda os temporizadores e as comunicações seriais. Você deve sujar as mãos com isso. Entenda os protocolos de RF, ajuste-os às suas necessidades. Não tente cegamente combinações de código durante a depuração. O código faz exatamente o que você pede. Leia o manual do usuário e a folha de dados e faça uma alteração se algo não funcionar. Tudo o que foi dito e feito, a única maneira real de se tornar um especialista é praticar. Continue construindo aplicativos. Em breve, isso se tornará uma segunda natureza.
fonte