Por que um desenvolvedor bare-metal mudou para sistemas operacionais
Olhando para trás, na 'Era do Metal Nu'
A primeira vez que soube do software embarcado foi por volta de 2008, eu estava no segundo ano e comecei a aprender sobre programação em um chip 51. Desde que me formei em ciência da computação, a maioria dos meus programas era executada no PC. Foi uma experiência completamente diferente ver programas rodando em uma placa de metal, e ainda me lembro da empolgação quando meu primeiro programa de lâmpadas de ciclismo foi executado com sucesso. No entanto, quanto mais programas bare-metal eu escrevia, mais problemas encontrava. Eu os sumarizo da seguinte forma:
Simultaneidade
Para programas bare-metal, há inevitavelmente um enorme loop ‘while (1)’, que contém quase toda a lógica de transação de todo o projeto. Cada transação invoca uma ou mais funções de atraso e são executadas em série quando a CPU está executando uma função de atraso, o resto das transações têm que esperar. Dessa forma, muito do tempo da CPU é desperdiçado em loops vazios, o que causa uma concorrência muito baixa.
Modularidade
Do ponto de vista do projeto de software, o princípio da alta coesão e baixo acoplamento é sempre enfatizado durante o processo de desenvolvimento. No entanto, os módulos em um software bare-metal geralmente dependem muito uns dos outros, não é conveniente projetar software com baixo acoplamento, o que torna difícil desenvolver grandes projetos em placas bare-metal. Por exemplo:
- Conforme mencionado acima, a maioria das funções são coletadas em um enorme loop ‘while (1)’ e difícil de dividir em módulos.
- Como outro exemplo, os desenvolvedores devem ter cuidado ao usar funções de atraso quando o cronômetro de watchdog está envolvido. Se o tempo de atraso for muito longo, a função principal não tem a oportunidade de redefinir o watchdog, então o watchdog será acionado durante a execução. Portanto, para o desenvolvimento bare-metal, há muitas coisas a serem consideradas, mesmo ao invocar uma função de atraso. Quanto mais complexo for o projeto, mais cuidados devem ser tomados.
Ecossistema
Muitos componentes de software avançados devem depender da implementação do sistema operacional de nível inferior. Por exemplo:
- Eu desenvolvi um projeto de código aberto baseado em ‘FreeModbus’ que planejei transplantar para várias plataformas, até mesmo as placas bare-metal foram consideradas. Mas, em comparação com a conveniência de adaptá-lo a diferentes sistemas operacionais, algumas funções são muito complexas para serem implementadas em todas as placas de metal puro. Por outro lado, muitas implementações devem ser projetadas do zero em diferentes plataformas de hardware por causa da falta de comunalidade, o que é uma tarefa enfadonha e demorada. Por enquanto, minha implementação do Modbus stack ainda não é capaz de rodar em placas bare-metal.
- Muitos kits de desenvolvimento de software WiFi (SDKs) fornecidos por grandes empresas como Realteck, TI e MediaTek só podem ser executados no sistema operacional. Eles não publicam o código-fonte do firmware para o usuário modificar, então você não pode usá-los dentro do ambiente bare-metal.
Tempo real
A capacidade em tempo real é necessária para alguns campos do aplicativo. Nessa situação, algumas etapas críticas do software devem ser acionadas em um momento específico. Para o controle da indústria, os dispositivos mecânicos devem concluir as ações em uma ordem e tempo predeterminados. Se a capacidade em tempo real não puder ser garantida, isso causará mau funcionamento, que pode colocar em risco a vida dos trabalhadores. Em plataformas bare-metal, quando todas as funções estão presas em um grande loop ‘while (1)’, é impossível manter as capacidades em tempo real.
Reutilização
A reutilização depende da modularidade diretamente. Acredito que ninguém gostaria de fazer o mesmo trabalho repetidamente, especialmente ao escrever código. Mas em várias plataformas de hardware com chips diferentes, a mesma função deve ser adaptada a hardware diferente, cujas implementações dependem muito do hardware de baixo nível. É inevitável reconstruir rodas.
A vantagem dos sistemas operacionais
Foi por volta de 2010 quando usei o sistema operacional pela primeira vez. A série de MCUs STM32 estava começando a se tornar popular. Com recursos poderosos, muitas pessoas executavam sistemas operacionais neles. Na época, eu estava usando o sistema operacional RT-Thread, para o qual existem muitos componentes prontos para usar. Em comparação com outros sistemas operacionais, me sinto mais confortável e desenvolvo nele há 10 anos.
Com base no meu entendimento, gostaria de discutir as vantagens dos sistemas operacionais:
Modularidade
Com o sistema operacional, todo o software pode ser dividido em várias tarefas (conhecidas como threads), cada thread tem seu próprio espaço de execução independente. Eles são independentes um do outro, o que melhora a modularidade.
Simultaneidade
Quando um encadeamento invoca a função de atraso, ele automaticamente cede a CPU para outros encadeamentos necessários, o que melhora a utilização de toda a CPU e, por fim, a simultaneidade.
Tempo real
Um RTOS é projetado com recursos em tempo real. Cada thread é atribuída a uma prioridade especificada. Os threads mais importantes são configurados para uma prioridade mais alta, os threads menos importantes são configurados para os inferiores. Desta forma, o desempenho em tempo real de todo o software é garantido.
Eficiência de desenvolvimento
O sistema operacional fornece uma camada unificada de interfaces abstratas, o que facilita o acúmulo de componentes reutilizáveis e melhora a eficiência do desenvolvimento.
O sistema operacional é um produto da sabedoria de um grupo de geeks de software. Muitas funções de software comuns, como semáforo, notificação de evento, caixa de correio, buffer de anel, lista de cadeia unilateral / lista bidirecional e assim por diante, são encapsuladas e abstraídas para tornar essas funções prontas para uso.
Sistemas operacionais como Linux e RT-Thread implementam um conjunto padrão de interfaces de hardware para hardware fragmentado, conhecido como estrutura de driver de dispositivo. Portanto, os engenheiros de software precisam apenas se concentrar no desenvolvimento e não precisam mais se preocupar com o hardware subjacente ou reconstruir as rodas.
Ecossistema de software
A riqueza do ecossistema traz o processo de mudanças quantitativas para qualitativas.
A melhoria da modularidade e capacidade de reutilização com sistemas operacionais nos permite encapsular componentes reutilizáveis incorporados e baseados em sistema operacional, que não só podem ser usados em nossos projetos, mas também podem ser compartilhados com mais desenvolvedores incorporados em necessidade, maximizando o valor do Programas.
Eu sou um geek de código aberto e abri alguns softwares incorporados no GitHub. Antes de criar software de código aberto, raramente conversava com outras pessoas sobre meus projetos porque considerava que, como as pessoas usam chips ou plataformas de hardware diferentes, meu código dificilmente poderia ser executado em seu hardware. Com os sistemas operacionais, a capacidade de reutilização do software é muito melhorada, muitos especialistas podem se comunicar uns com os outros sobre o mesmo projeto. Eles são até de países diferentes. Isso está encorajando mais e mais pessoas a compartilhar e falar sobre seus projetos.
Integrado
- Sistemas de numeração
- Sistemas de sinais atuais
- Rastreamento de contato na indústria:Por que precisamos de sistemas de posicionamento local baseados em Wi-Fi ultraprecisos
- Por que ainda estamos tolerando o tempo de inatividade devido à falta de energia?
- Por que a segurança cibernética é essencial para a tranquilidade da segurança física
- 3 razões pelas quais um sistema de transporte pneumático é superior
- Por que I.T. Os sistemas são essenciais para a evolução da cadeia de suprimentos global
- Por que as cadeias de suprimentos da indústria farmacêutica devem se tornar digitais:seis perguntas a serem consideradas
- Procedimentos de operação segura para sistemas de ar comprimido
- Por que a rastreabilidade é uma base essencial para sistemas de manufatura habilitados para IIoT