Software embutido - Embedded software

Software embutido é um software de computador , escrito para controlar máquinas ou dispositivos que normalmente não são considerados computadores, comumente conhecidos como sistemas embutidos . Normalmente é especializado para o hardware específico em que é executado e tem restrições de tempo e memória. Às vezes, esse termo é usado alternadamente com firmware .

Um close-up do chip SMSC LAN91C110 (SMSC 91x), um chip Ethernet integrado

Uma característica precisa e estável é que nenhuma ou todas as funções do software embarcado são iniciadas / controladas por meio de uma interface humana, mas sim por meio de interfaces de máquina.

Os fabricantes incorporam software embutido na eletrônica de carros , telefones, modems, robôs , eletrodomésticos, brinquedos, sistemas de segurança, marca-passos , televisores e decodificadores e relógios digitais , por exemplo. Este software pode ser muito simples, como controles de iluminação executados em um microcontrolador de 8 bits com alguns kilobytes de memória com o nível adequado de complexidade de processamento determinado com uma estrutura de computação provavelmente aproximadamente correta (uma metodologia baseada em algoritmos aleatórios ). No entanto, o software embarcado pode se tornar muito sofisticado em aplicativos como roteadores , elementos de rede óptica, aviões , mísseis e sistemas de controle de processo .

Sistemas operacionais

Ao contrário dos computadores padrão que geralmente usam sistemas operacionais como macOS , Windows ou Linux , o software embarcado pode não usar nenhum sistema operacional. Quando eles usam um, uma grande variedade de sistemas operacionais podem ser escolhidos, normalmente um sistema operacional em tempo real . O código para software embarcado é normalmente escrito em C ou C ++ , mas várias linguagens de programação de alto nível , como Java , Python e JavaScript , agora também são de uso comum para microcontroladores e sistemas embarcados de destino. Linguagens assembly também são freqüentemente usadas, especialmente na inicialização e tratamento de interrupções . Ada é usado em alguns projetos militares e de aviação.

Diferenças do software de aplicativo

Interface de usuário de texto do sistema incorporado usando MicroVGA

A maioria dos consumidores está familiarizada com o software aplicativo que fornece funcionalidade em um computador. No entanto, o software embarcado costuma ser menos visível, mas não menos complicado. Ao contrário do software de aplicativo, o software incorporado tem requisitos e recursos de hardware fixos, e a adição de hardware ou software de terceiros é estritamente controlada.

O software incorporado precisa incluir todos os drivers de dispositivo necessários no momento da fabricação e os drivers de dispositivo são escritos para os vários dispositivos de hardware. Esses drivers de dispositivo, chamados BSP ( pacote de suporte da placa ), formam a camada de software que contém drivers específicos de hardware e outras rotinas que permitem que um determinado sistema operacional (tradicionalmente um sistema operacional em tempo real, ou RTOS) funcione em um ambiente de hardware específico (um computador ou placa de CPU), integrado com o próprio RTOS. O software é altamente dependente da CPU e dos chips específicos escolhidos. A maioria dos engenheiros de software embarcado tem pelo menos um conhecimento básico de leitura de esquemas e leitura de planilhas de dados para componentes para determinar o uso de registros e sistema de comunicação. A conversão entre decimal , hexadecimal e binário é útil, além de usar a manipulação de bits .

Os aplicativos da Web são freqüentemente usados ​​para gerenciar hardware, embora arquivos XML e outras saídas possam ser passados ​​para um computador para exibição. Normalmente, são usados ​​sistemas de arquivos com pastas, mas os bancos de dados SQL costumam estar ausentes.

O desenvolvimento de software requer o uso de um compilador cruzado , que é executado em um computador, mas produz código executável para o dispositivo de destino. A depuração requer o uso de um emulador no circuito e hardware de depuração, como depuradores JTAG ou SWD . Os desenvolvedores de software geralmente têm acesso ao código-fonte completo do kernel (SO).

O tamanho da memória de armazenamento e da RAM pode variar significativamente. Alguns sistemas rodam em 16 KB de Flash e 4 KB de RAM com uma CPU operando a 8 MHz, outros sistemas podem rivalizar com os computadores contemporâneos. Esses requisitos de espaço levam a mais trabalho sendo feito em C ou C ++ incorporado , em vez de C ++. Linguagens interpretadas como BASIC (enquanto por exemplo Parallax Propeller pode usar compilado BASIC) e Java (Java ME incorporados 8.3 está disponível para, por exemplo ARM Cortex-M4 , Cortex-M7 microcontroladores e mais velhos ARM11 usado em Raspberry Pi e Intel Galileo Gn 2) não são comumente usado; enquanto uma implementação da linguagem Python 3 interpretada - MicroPython  - está disponível expressamente para uso de microcontrolador, por exemplo, baseado em ARM de 32 bits (como BBC micro: bit ) e microcontroladores PIC de 16 bits .

Protocolos de comunicação

As comunicações entre processadores e entre um processador e outros componentes são essenciais. Além do endereçamento de memória direto , os protocolos comuns de nível de hardware incluem I²C , SPI , portas seriais , 1-Wires , Ethernets e USB .

Os protocolos de comunicação projetados para uso em sistemas embarcados estão disponíveis como fonte fechada de empresas como InterNiche Technologies e CMX Systems . Os protocolos de código aberto derivam de uIP , lwip e outros.

Veja também

Notas

Referências

  • Edward A. Lee, "Embedded Software", Advances in Computers (M. Zelkowitz, editor) 56 , Academic Press, Londres, 2002.