Software embarcado

Origem: Wikipédia, a enciclopédia livre.
(Redirecionado de Software Embarcado)

Software embarcado ou software incluído é software de computador, escrito para controlar máquinas ou dispositivos que não são geralmente considerada como computadores. É, normalmente, específico para um determinado hardware que executa e tem tempo e com restrições de memória.[1] Este termo é às vezes usado de forma intercambiável com o firmware, apesar de firmware também pode ser aplicado a ROM com o código em um computador, em cima do qual o sistema operacional é executado, considerando que o software embarcado é normalmente o único software do dispositivo em questão.

Uma precisa e estável característica é a de que nem todas as funções do software embarcado são iniciadas/controlado através de uma interface humana, mas através de interfaces de máquina em vez disso.[2]

Os fabricantes 'embutem' o software integrado no sistema eletrônico de veículos automóveis, telefones, modems, robôs, eletrodomésticos, brinquedos, sistemas de segurança, pacemakers, televisores e set-top boxes, e relógios digitais, por exemplo.[3] Este software pode ser muito simples, tais como controles de iluminação que rodam em um microcontrolador de 8-bits  com poucos kilobytes de memória, com o nível adequado de complexidade de processamento determinada com um, Quadro de Probabilidade Aproximadamente Correta de Computação[4] (uma metodologia baseada em algoritmos randomizados), ou pode tornar-se muito sofisticado em aplicações como aviões, mísseis, e processo de controle de sistemas.[5]

Sistemas operacionais[editar | editar código-fonte]

Ao contrário do padrão computadores, geralmente, utilizar um sistema operacional, como o OS X, Windows ou GNU/Linux, software embarcado pode usar nenhum sistema operacional, ou quando eles fazem uso uma grande variedade de sistemas operacionais pode ser escolhido, normalmente um sistema operacional de tempo real. Este é executado a partir de uma operação de uma só pessoa que consiste de um ciclo e um timer, para LynxOS, VxWorks, BeRTOS, ThreadX, para Windows CE ou Linux (com o patch de kernel). Outros incluem o OpenWrt, PikeOS, eCos, Fusão RTOS, Núcleo RTOS, RTEMS, a INTEGRIDADE, a uC/OS, QNX, FreeBSD e OSE. Código normalmente é escrito em C ou C++, mas várias linguagens de programação alto nível, tais como Python e JavaScript, são agora também no uso comum, para destino microcontroladores e sistemas embarcados.[6] Ada é usado em alguns militares e de aviação projetos.

Diferenças na aplicação do software [editar | editar código-fonte]

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

Software embarcado deve incluir todos os drivers de dispositivo no momento da fabricação, e os drivers de dispositivo são escritos para o hardware específico. O software é altamente dependente da CPU e o chip especificamente escolhido. Os engenheiros de software têm pelo menos uma passagem de conhecimento de leitura de diagramas esquemáticos, e a leitura de datasheet de dados dos componentes para determinar o uso dos registradores e do sistema de comunicação. Conversão entre decimal, hexadecimal e binário é útil, bem como o uso de manipulação de bits.[7]

Aplicações Web são raramente usadas, apesar de arquivos XML e outros parâmetros que podem ser passados para um computador para visualização. Sistemas de arquivos com pastas estão geralmente ausentes, como são os bancos de dados SQL.

O desenvolvimento de software requer o uso de um compilador cruzado, que é executado em um computador, mas produz um código executável para o dispositivo de destino. A depuração exige a utilização de um in-circuito emulador, JTAG ou SWD. Os desenvolvedores de Software têm muitas vezes acesso a todo o kernel (SO) de código fonte.

O tamanho da memória de armazenamento e memória RAM pode variar significativamente. Alguns sistemas são executados em 16 KB de Flash e 4 KB de RAM com um CPU rodando em 8 MHz, outros sistemas podem rivalizar com os computadores de hoje.[8] Estes requisitos de espaço levam mais trabalho para projetos sendo feito em C ou embedded C++, em vez de C++. Linguagens interpretadas como o BASIC (enquanto e.g. Paralaxe Hélice pode usar BASIC compilado) e Java (Java ME Embedded 8.3[9] está disponível para microcontroladores ARM Cortex-M4, Cortex-M7 e os mais antigos ARM11 usado no Raspberry Pi e Intel Galileu Gn 2) normalmente não são utilizados; enquanto uma implementação da interpretado da linguagem Python 3 – MicroPython – é, no entanto, disponível expressamente para microcontrolador utilizar, e.g. 32-bit ARM (como o BBC micro:bit) e 16-bits microcontroladores PIC.

Protocolos de comunicação[editar | editar código-fonte]

A comunicação entre processadores e entre um processador e de outros componentes são essenciais. Além de direto endereçamento de memória, protocolos comuns incluem I2C, SPI, portas seriais e USB.

Protocolos de comunicação projetado para o uso em sistemas embarcados estão disponíveis como código fechado de empresas, incluindo a InterNiche Tecnologias e CMX Sistemas. Open-source protocolos tronco da uIP, lwip, e outros.

Bibliografia[editar | editar código-fonte]

  1. Rodrigo M. A Almeida, Carlos Henrique Valério, Thatyana Faria Piola Seraphim, Programação de sistemas Embarcados, GEN LTC, 2016, ISBN 978-8535285185 (em português)
  2. Edward A. Lee, "Embedded Software", Advances in Computers (M. Zelkowitz, editor) 56, Academic Press, London, 2002.
  3. Jack Ganssle, The Art of Programming Embedded Systems , Elsevier, 2012 ISBN 0-080-49942-2 (em inglês)
  4. Michael Barr, Anthony Massa, Programming Embedded Systems: With C and GNU Development Tools , "O'Reilly Media, Inc.", 2006 ISBN 0-596-55328-5 (em inglês)

Referências[editar | editar código-fonte]

  1. «Stroustrup on C++ for embedded (bottom p.2)» (PDF). Consultado em 9 de dezembro de 2012 
  2. «I.C.S. on embedded software». Consultado em 22 de julho de 2013. Arquivado do original em 22 de março de 2013 
  3. «Embedded Systems Methods and Technologies». Consultado em 9 de dezembro de 2012 
  4. Alippi, Cesare (2014), Intelligence for Embedded Systems, ISBN 978-3-319-05278-6, Springer .
  5. http://ptolemy.eecs.berkeley.edu/publications/papers/02/embsoft/embsoftwre.pdf
  6. Mazzei, Daniele; Montelisciani, Gabriele; Baldi, Giacomo; Fantoni, Gualtiero (2015). Changing the programming paradigm for the embedded in the IoT domain. Internet of Things (WF-IoT), 2015 IEEE 2nd World Forum on. Milan: IEEE. pp. 239–244. doi:10.1109/WF-IoT.2015.7389059 
  7. «Stroustrup on embedded software». Consultado em 9 de dezembro de 2012. Arquivado do original em 3 de fevereiro de 2013 
  8. «Example of embedded CPU». Consultado em 9 de dezembro de 2012 
  9. «Java ME Embedded». Oracle Technology Network 

Veja também[editar | editar código-fonte]