O que faz um engenheiro de sistemas embutidos?
Tal como os engenheiros de software de desktop, eles escrevem código para resolver problemas e implementam sistemas.
Não parecidos com os engenheiros de software de desktop, eles geralmente precisam:
-- Lidar com novo hardware/silício, que pode ser buggy. I'trabalhei em sistemas onde, devido a falhas de hardware, escrever um byte na memória e depois lê-lo de volta me deu um valor diferente. Você encontra o problema, envia-o para os engenheiros de hardware, e espera que eles dêem a volta a uma correção.
-- Role seu próprio sistema operacional, ou pelo menos configure um sistema operacional de acordo com o projeto de hardware e o mapa de memória do seu sistema. Os engenheiros de software de desktop esperam que um SO seja fornecido e não estão preocupados com a forma como esse SO ganha vida, ou com o mapa de memória do hardware em que é executado. Estas são muitas vezes coisas a que um engenheiro incorporado deve atender, em algum nível ou outro. I'já lidei com isso em diferentes níveis; uma vez tive a grande alegria de projetar e implementar meu próprio SO cooperativo multitarefa para um quadro personalizado para o qual não existia nenhum SO. Outras vezes, era apenas uma questão de configurar o Linux embutido. Em ambos os casos, você precisará conhecer seu hardware para fazer o trabalho direito.
-- Preocupe-se com os dispositivos. Às vezes, o hardware é novo ou personalizado para o design. Outras vezes, ele está fora da prateleira, mas não existe nenhum driver para o seu sistema operacional. Em sistemas desktop, o próprio SO fornece o suporte necessário, mas é muito mais provável que você precise rolar o seu próprio sistema embutido, especialmente se o hardware for novo.
-- Lide com restrições de memória/recursos. Sistemas embarcados podem, e muitas vezes têm, recursos limitados de memória e CPU, devido a restrições comerciais, ou ao empacotamento/ambiente no qual eles devem ser implantados. A fragmentação da memória pode ser um problema grave. Dependendo do projeto/dispositivo, às vezes esquemas de alocação de memória personalizados para substituir aqueles fornecidos pelo fornecedor do compilador precisam ser usados para lidar com essas restrições.
-- Preste muita atenção às preocupações com confiabilidade, segurança e exatidão. Os sistemas incorporados utilizados no sistema de travagem do seu automóvel' ou nos sistemas aviónicos Boeing 777, não podem falhar, porque as vidas dependem disso. Isto muitas vezes significa que os engenheiros incorporados passam por níveis de especificação, teste/QA, revisões de código, e assim por diante, que você normalmente não submete't submete os desenvolvedores de aplicativos desktop. Os sistemas podem ter componentes redundantes que independentemente computam ou obtêm resultados ou lêem sensores, e usam alguma heurística como a votação para obter um resultado final que é reportado ao resto do sistema.
-- Observe as restrições em tempo real. Os desenvolvedores de sistemas incorporados geralmente têm restrições mais rígidas em relação à rapidez com que os sistemas que implementam respondem aos eventos, ou emitem comandos para acionar os controles. Muitas vezes, o comportamento correto e as vidas podem depender do cumprimento dessas restrições de tempo. Enquanto a comunicação entre um cliente/servidor sobre TCP/IP pode ser testada novamente até ser completada com sucesso com, no máximo, uma latência observada por parte do usuário, as aplicações embarcadas em tempo real falhariam em circunstâncias similares. As comunicações não devem ser perdidas, e as latências devem ser mínimas. Os comandos para fazer com que os ailerons de um Boeing 777 se movam em resposta ao comando piloto devem ser altamente responsivos à entrada dos pilotos.
-- Desenvolva uma estratégia de depuração. Na minha experiência, o desenvolvimento e depuração de sistemas embarcados pode ser um desafio. Em alguns casos, para mim, isso significou acender LEDs ou inverter bits na RAM de vídeo para detectar que o meu código atingiu um certo ponto de execução. Muitas vezes, a primeira coisa que um desenvolvedor fará é colocar um driver de porta serial funcionando, e implementar o printf para que as declarações de log/trace possam ser emitidas para fora da porta serial. Mais idealmente (e provavelmente) um desenvolvedor embarcado com uso de JTAG, in-circuit-emulation, Nexus, ou outro mecanismo fornecido pelo projeto de hardware/toolchain para depurar sistemas embarcados.
Artigos semelhantes
- Qual é a diferença entre engenheiro incorporado e engenheiro de firmware?
- Quais laptops vêm com antivírus embutidos que não o Mac?
- Os iPhones têm rastreadores embutidos?
- Existem empresas que desenvolvem sistemas operacionais móveis virtualizados remotos, tais como sistemas operacionais como Android e iOS?