Sistemas operacionais
Os sistemas incorporados muitas vezes não precisam de um sistema operacional completo. Alguns utilizam sistemas operacionais pequenos e simples especialmente construídos que começam muito rapidamente, outros não precisam de nenhum sistema operacional. Os sistemas incorporados não são adaptados tão facilmente, mas são construídos para executar suas tarefas de forma muito mais confiável. Como o hardware é mais simples, muitas vezes também é mais barato construir e funciona mais rápido.
Em contraste, um computador de uso geral precisa estar pronto para novos drivers de dispositivos e software para executar hardware que ainda não conhece, como novas impressoras ou discos rígidos. Ele precisa executar diferentes programas de aplicação.
À medida que os sistemas embarcados se tornam maiores, coisas que antes eram apenas em computadores de uso geral ou mesmo mainframes estão agora se tornando comuns em sistemas embarcados. Isto inclui espaço de memória protegido e ambiente de programação aberto, incluindo Linux, NetBSD, etc.
Alguns exemplos de sistemas operacionais, do simples ao complexo:
- Loop de controle simples - Um timer e um loop são usados para chamar repetidamente diferentes sub-rotinas. Isto é freqüentemente feito por uma pessoa para sistemas menores.
- interrupção controlada - As tarefas são iniciadas por diferentes tipos de eventos. O evento pode ser algo temporizado (a cada dez segundos, por exemplo) ou por um aperto de botão ou por dados recebidos.
- multitarefa não preventiva - Cada tarefa tem sua vez de ser executada, e quando termina chama um programador no sistema operacional para executar a próxima tarefa.
- multitarefa ou multi-tarefa preventiva - Uma tarefa pode ser interrompida após algum tempo para deixar outra tarefa decorrer por algum tempo. Nenhuma tarefa pode monopolizar o sistema. Neste nível, o sistema é considerado como tendo um núcleo de "sistema operacional" e pode executar tarefas em paralelo. Este tipo de sistema operacional é normalmente comprado de uma empresa que só trabalha com sistemas operacionais embarcados.
Os sistemas operacionais em tempo real incluem produtos como MicroC/OS-II, Green Hills INTEGRITY, QNX ou VxWorks. Ao contrário do MacOS ou Windows 7, estes sistemas operacionais não são muito bem conhecidos pela maioria das pessoas. Mas eles são usados em muitos lugares onde o tempo e a segurança são muito importantes. As pessoas os usam todos os dias e não se dão conta disso.
Exemplos comuns de núcleos maiores são o Embedded Linux e o Windows CE. Embora estes não tenham os limites de tempo necessários para um sistema rígido em tempo real, eles estão se tornando mais comuns, especialmente para dispositivos mais poderosos, tais como Roteadores sem fio e GPSs. Eles permitem a reutilização de código de domínio público para Drivers de Dispositivos, Servidores Web, Firewalls, e outros códigos. Os desenvolvedores de software que se sentem mais à vontade para escrever aplicações para PCs também acharão isto mais familiar. Se necessário, uma FPGA ou outro hardware especial pode ser usado para coisas que precisam de limites de tempo apertados.
Ferramentas
Como outros softwares, os projetistas de sistemas embarcados usam compiladores, montadores e depuradores para desenvolver softwares de sistemas embarcados. Entretanto, eles também podem usar algumas ferramentas mais específicas:
- Para sistemas que usam processamento digital de sinais, os desenvolvedores podem usar ferramentas matemáticas como MATLAB, MathCad, ou Mathematica.
- Compiladores e ligadores personalizados podem ser usados para melhorar a otimização do hardware em particular.
- Um sistema incorporado pode ter sua própria linguagem especial ou ferramenta de projeto, ou acrescentar melhorias a uma linguagem existente como a utilizada pelo Selo Básico.
Ferramentas de depuração:
- Um depurador em circuito (ICD), um dispositivo de hardware que se conecta ao microprocessador através de uma interface JTAG. Isto inicia e pára o microprocessador de fora enquanto ele executa o software. Ele também permite que a memória e os registros sejam lidos, e que o programa de software seja armazenado na memória.
- Depuração externa usando registro ou saída de porta serial para rastrear a operação usando um monitor intermitente (printfs).
- Depuração residente interativa - se o SO suportar, este é um shell no processador incorporado que executa comandos digitados pelo desenvolvedor (Linux, por exemplo).
- Um emulador em circuito substitui o microprocessador na placa, proporcionando controle total sobre tudo o que o microprocessador poderia fazer.
- Um emulador completo simula todas as características do hardware, permitindo que todo ele seja controlado e modificado. O hardware não existe realmente, mas uma versão fingida dele (uma máquina "virtual") está em um PC normal.
- Verificação de linhas externas com um analisador lógico ou multímetro.
A menos que restrito à depuração externa, o programador normalmente pode carregar e executar o software através das ferramentas, visualizar o código rodando no processador e iniciar ou parar sua operação. A visualização do código pode ser como código de montagem ou código-fonte. Alguns sistemas integrados (como o VxWorks ou Green Hills) têm características especiais, como manter o controle de quanto espaço o software ocupa enquanto roda, que tarefas estão sendo executadas e quando as coisas acontecem.
Dependendo do tipo de sistema incorporado que está sendo feito, afetará a forma como ele pode ser depurado. Por exemplo, a depuração de um único sistema de microprocessador é diferente da depuração de um sistema onde o processamento também é feito em um periférico (DSP, FPGA, co-processador).