Como são programadas as máquinas do dia-a-dia (não tanto computadores e dispositivos móveis como eletrodomésticos, relógios digitais, etc.)? Que tipo de código entra na programação de uma máquina de venda automática de Coca-Cola? Como minha cafeteira aceita um horário pré-programado e começa a preparar um bule de café horas depois, quando esse horário chega?
Esses tipos de máquinas têm sistemas operacionais dentro deles ou é algo ainda mais básico? Eles estão escritos em Assembly, C ou em algum outro idioma?
E eu realmente gostaria de encontrar algum recurso que lista esses sistemas operacionais ou sistemas de código subjacentes, possivelmente até mesmo com o código-fonte, se possível. Se alguém souber de um recurso desse tipo (a pesquisa não me forneceu nada), isso seria fantástico.
fonte
Respostas:
A maioria do que você está falando são sistemas baseados em embarcações, onde C é um luxo que geralmente não está disponível. Eles não têm software no sentido tradicional. Na maioria das vezes, o software é escrito em C, montagem ou mesmo código de máquina. C e ASM exigem que os compiladores sejam gravados para usá-los nessa plataforma. O código da máquina é escrito como binário sem um compilador.
Sua cafeteira e os sistemas mais simples como esse não possuem um sistema operacional. Eles simplesmente carregam a partir de um endereço inicial na memória e você coloca seu código lá. Freqüentemente, esses sistemas têm seu "código" gravado nas EEPROMS que atuam como o disco rígido do sistema. Dane-se o código depois de gravar os bailes de formatura,
jogue os chips fora,renove-os e comece novamente. Existem chips FPGA mais recentes que os dispositivos mais avançados usam para facilitar o teste, a implantação etc., mas são a mesma coisa.Máquinas de coca-cola, roteadores etc. geralmente usam um sistema operacional em tempo real como QNX, EMBOS ou, às vezes, RTlinux, se você tiver sorte. A maioria destes são SOs proprietários licenciados por muito dinheiro, mas eles têm compiladores C, drivers para trabalhar com hardware, etc.
http://www.qnx.com/
http://www.segger.com/cms/embos.html
http://www.microsoft.com/windowsembedded/en-us/campaigns/compact7/default.aspx?WT.srch=1&WT.mc_ID=SEARCH
RTLinux
fonte
Eles usam microcontroladores, o 8051 é o clássico. Estes são núcleos de 8 ou 16 bits, raramente possuem um sistema operacional. O programador grava o código para inicializar os periféricos integrados e implementar os manipuladores de interrupção. Os idiomas usados são assembly e C. Trabalhos de depuração difíceis exigem um emulador no circuito.
Há muito espaço para crescer além disso, com núcleos incorporados de 32 bits (ARM é o gorila de 100 libras) que inicializam uma versão incorporada do Linux e / ou da Java JVM.
fonte
Estes são sistemas embarcados e seriam programados usando uma linguagem de nível muito baixo, como C ou assembly. Em geral, esse sistema é executado sem um sistema operacional, embora algumas "máquinas comuns" mais recentes, como aparelhos de DVD blue-ray e roteadores sem fio, executem seu código em cima de um sistema operacional baseado em unix.
Atualizar
Seguindo o que outros já disseram, muitos sistemas embarcados modernos também possuem uma variedade de janelas. Depende da aplicação. Além disso, há uma tendência em muitos espaços de rodar em uma plataforma mais poderosa com um sistema operacional, para lidar com casos como players Blue-ray que precisam executar Java e outras instâncias em que o usuário final deseja mais funcionalidade.
fonte
Vamos pensar no processador em sua área de trabalho. Tudo o que faz é executar as instruções da máquina e, por si só, não está realmente preocupado com "sistemas operacionais" ou "programas".
Você liga o computador, o processador aponta para a primeira instrução e ela começa a ser executada.
Na área de trabalho, ele inicia a execução do "sistema operacional". Mas não há razão para que você não possa ter o processador executando qualquer conjunto de instruções escolhido. (Isso pode não ser muito útil, pois você ainda deseja gerar resultados para a tela e essa funcionalidade reside no sistema operacional.) Ao mesmo tempo, se as instruções da sua máquina consistirem nos códigos de operação corretos, para que o processador produza a sequência correta de sinais para pintar uma imagem no monitor, tanto melhor. Nenhum sistema operacional é necessário.
Os desktops fazem tantas coisas que geralmente exigimos a abstração de um sistema operacional. Mas, no essencial, tudo o que o processador faz é executar instruções.
O mesmo para o processador em máquinas de coca-cola e máquinas de café. Tudo o que faz é executar instruções.
Bem, escrever instruções da máquina pouco a pouco é entediante. Portanto, assim como nos desktops, normalmente escrevemos código em C, que é compilado no código da máquina. Esse código de máquina é carregado no processador incorporado e é executado.
Os sistemas embarcados fazem tão pouco que não precisam de sistemas operacionais completos. Um microcontrolador pode ter 8 ou 16 pinos no chip - em comparação com a pontuação de pinos no soquete normal da CPU.
Portanto, o fluxo de trabalho é escrever algum código (digamos, em C), compilá-lo na sua máquina desktop. Esse compilador gera código de máquina para o chip incorporado. Em seguida, esse código é carregado no microprocessador (e você precisa de um hardware especial para fazer isso.) Em seguida, você liga o chip e ele começa a executar as instruções. Simples!
fonte
Muitos dispositivos que executam uma função específica não contêm nenhum "código". Eles desempenham suas funções através das propriedades de seus componentes eletrônicos. Os sistemas mais avançados, que podem executar muitas funções diferentes ou precisam ser facilmente atualizáveis, conterão um microcontrolador e algum tipo de "sistema operacional". Como estes ainda têm alguns limites para sua funcionalidade, o sistema operacional será simples e especialmente projetado. Ficando ainda mais avançado, o dispositivo conterá algo semelhante a um computador. Ele terá um sistema operacional mais complicado que pode se comunicar com diferentes partes do sistema. Por fim, você acessa dispositivos como smartphones, que contêm um sistema operacional completo que pode executar código no nível do usuário e ter muito mais informações do que dispositivos mais simples. Contudo, até os processadores modernos são essencialmente circuitos elétricos muito grandes. Toda instrução que a CPU reconhece fará com que um circuito diferente seja usado para executar essa função.
Aqui estão algumas páginas da Wikipedia que podem lhe interessar:
http://en.wikipedia.org/wiki/Electrical_engineering
http://en.wikipedia.org/wiki/Integrated_circuits
http://en.wikipedia.org/wiki/Electronic_engineering
http://en.wikipedia.org/wiki / Computer_engineering
http://en.wikipedia.org/wiki/Microcontroller
fonte
Essa é uma pergunta muito ampla e depende muito da máquina. Só posso supor que a maioria dessas máquinas de venda automática seja controlada por microcontroladores (8051, PIC, ARM7, para citar algumas das mais usadas) e raramente tenha um sistema operacional e, se houver, seria algum tipo de RTOS, como FreeRTOS .
Máquinas mais complexas, como DVD / BluRay players ou telefones celulares, são executadas em plataformas sofisticadas, como o OMAP4 . Normalmente, um sistema operacional Unix é executado neles.
fonte
Os microcontroladores low-end encontrados em equipamentos comuns normalmente não executam um sistema operacional. Eles são escolhidos por baixo custo, e os principais fatores que levam a esse custo são o número de pinos no chip (de uma dúzia a algumas centenas) e a quantidade de memória interna (de alguns kilobytes a uma megabyte ROM, de alguns bytes a cem kilobytes de RAM).
À medida que o recurso creep trabalha sua mágica, acontece que um micro-ondas pode precisar executar várias tarefas ao mesmo tempo. Nesse caso, o programador recupera o curso de sistemas operacionais e implementa a passagem de mensagens, o agendamento de tarefas, a E / S assíncrona, etc., conforme necessário!
Obviamente, por uma questão de conveniência, simplicidade, tamanho do código etc., os recursos tendem a ser feitos de maneira rudimentar. Geralmente, depende de como você analisa o programa, para encontrar a funcionalidade generalizada do SO no código específico da tarefa. Mas está muito longe de um agendador de tarefas codificado para um sistema operacional, e quando você tem apenas alguns kilobytes para trabalhar, um sistema operacional pronto para uso não é a solução.
Dê uma olhada no DigiKey, um site popular de seleção de peças eletrônicas, para aprender sobre os MCUs de baixo custo. Aqui estão as informações sobre um MCU muito barato com um controlador LCD, como pode ser encontrado em uma máquina de café. É fácil o suficiente para obter o manual de programação e tudo mais.
fonte
O trabalho de um sistema operacional é fornecer acesso compartilhado aos recursos - tempo de execução da CPU, RAM, E / S, etc. , portanto, eles não precisam de um sistema operacional.
Os sistemas incorporados são tipicamente programados em C e, às vezes, em montagem para otimização extrema de tempo ou memória. Alguns compiladores incorporados permitem intercalar a montagem em uma linguagem de nível superior.
fonte
Recentemente, deparei com uma máquina de venda automática de cigarros que executava o Ubuntu (a máquina estava reiniciando, para que eu pudesse ver o logotipo).
fonte
Dê uma olhada na Embedded Systems Magazine e Circuit Cellar
fonte
Se você estiver pesquisando informações em geral, procure coisas como "sistemas embarcados", "soc" (sistema em um chip). Eu diria que uma grande parte desses tipos de dispositivos é executada em idiomas de baixo nível, como C.
Curiosidade: o Java foi originalmente concebido como uma solução para a programação de sistemas embarcados: http://en.wikipedia.org/wiki/Oak_(programming_language )
fonte
A maioria dos quiosques, registros, telas drive-thru e até máquinas de café e microondas de ponta realmente executam o Windows XP ou Linux, como as máquinas da série "Jura Impressa"; você pode colocar SSH neles e fazer café.
Aqui está um script github de um trabalho cron da máquina de café: https://github.com/NARKOZ/hacker-scripts/blob/master/fucking_coffee.rb
A maioria dos roteadores, fornos mais novos, geladeiras mais recentes, carros, aparelhos de DVD, vários eletrônicos, produtos mais recentes de automação residencial, incluindo lâmpadas, executa uma versão do ARM linux ou Linux incorporado.
Os dispositivos mais baratos, com menos de US $ 20, se forem mais novos, são executados no ESP8266 ou em um dispositivo semelhante (pode executar LUA ou um servidor de Nó reduzido por US $ 2 a granel - muito barato)
http://nodemcu.com/index_en.html
O uso de FPGA e sistemas embarcados como 8051, Z80 ou outros dispositivos embarcados, como PICC, AVR e Arduino, será em breve substituído por sistemas all-in-one / SoC (System on Chip) como o ESP8266. Eles são simplesmente muito fáceis de programar e são um sistema completo em um chip que executa seu próprio servidor web; basta ligá-los, fazer upload do código-fonte e você tem um servidor em rede por US $ 2.
Eu cresci codificando PICC e AVR e 8051, e estou triste por vê-los partir, mas não toquei em nada além de ESP8266es em anos porque eles são 1/10 do preço e são uma ordem de magnitude mais fácil de trabalhar. . Você pode obtê-los em placas de desenvolvimento com baterias e layouts de pinos explodidos por US $ 5 no ebay ou US $ 10 em adafruit.
fonte
Ouvi de um engenheiro que os trens da Siemens para trens leves ligam os 386s.
fonte