Como são programadas as máquinas cotidianas?

147

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.

Josh Leitzel
fonte
12
Pergunta fantástica! Fiquei me perguntando a mesma coisa.
Jonathan Sterling
7
Faça alguma pesquisa / pesquisa em "sistemas embarcados" (eu até adicionei a tag para você).
mu é muito curta
Em caso de votação estreita: eu não vejo isso como material para programadores, porque se trata de programação . Por outro lado, pode ser bom no site de eletrônica SE, simples, porque haverá mais especialistas. A resposta, é claro, são algumas das opções acima. Você precisará escolher uma turma menor antes de obter uma resposta.
dmckee --- ex-moderador gatinho
É uma pergunta muito ampla, que abrange pelo menos três disciplinas de engenharia e muitas tonalidades entre elas.
precisa
FWIW, você pode estar interessado em jogar com uma plataforma de microcontrolador como o Arduino (~ $ 30) arduino.cc .
precisa

Respostas:

47

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

chubbsondubs
fonte
35
Pessoas codificando em binário? Montadores são tão estupidamente simples de escrever que acho difícil de acreditar. Você tem uma fonte para isso? Além disso, esta resposta dá a falsa impressão de que todos os sistemas contêm um microprocessador que executa código. Embora isso esteja se tornando mais popular à medida que os microcontroladores e a EEPROM (que facilitam a depuração e a atualização) se tornam mais baratos, ainda não vale a pena para sistemas muito baratos ou sistemas que não mudaram muito nos últimos 20 anos. Por exemplo, alguns relógios digitais.
BlueRaja - Danny Pflughoeft
6
Isto é simplesmente muito forte. Você não precisa hospedar o compilador no destino. Compiladores cruzados são muito comuns na programação incorporada.
dmckee --- ex-moderador gatinho
12
Uma máquina de coque com QNX? WTF - esse é outro tipo de coca-cola! E sim, existe um compilador C para todas as plataformas atualmente em volume. Ninguém quer escrever montagem, a falta de C seria uma grande desvantagem. (Alguns compiladores não são muito boas , concedido.)
Potatoswatter
8
Além disso, a EEPROM, por definição, pode ser reescrita mais de 100000 vezes. As memórias de gravação única são obsoletas; Todos os microcontroladores populares hoje possuem Flash. O FPGA é um mercado completamente diferente do MCU low-end ... você não tem idéia do que está falando.
Potatoswatter
7
Eu tenho um amigo que trabalha em máquinas de venda automática bastante complexas. Eles possuem rádios celulares, monitoram inventário, rastreiam a temperatura, relatam números financeiros e enviam chamadas HTTP de volta aos servidores para agregar todos esses dados, para que você possa rastrear todas as suas máquinas. E sim, essas marcas de máquinas estão usando um SO incorporado. Eu acho que eles estão usando RTLinux usando C. Então, sim, mesmo a máquina de venda automática está se tornando complexa o suficiente para garantir o SO incorporado.
Chubbsondubs
29

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.

Hans Passant
fonte
5
Isso é um pequeno gorila, mas eu acho que restrições de energia são bastante importante, com grandes macacos incorporados;)
Piskvor deixou o prédio
Obrigado! Sua resposta foi útil para mim e eu te dei uma votação.
Josh Leitzel
Os chips ARM também estão entrando na extremidade baixa ... com preços <1USD, pegada 2x2mm.
Domen 25/04
24

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.

Justin Ethier
fonte
Para esclarecer, Bluray usa Java.
Andrew Marshall
6
Talvez, mas os jogadores reais rodar o Linux e são escritos em C / C ++
Justin Ethier
Caixas registradoras, bombas de gasolina e coisas semelhantes estavam funcionando (algumas marcas), infelizmente, algumas delas funcionam agora (mercearia ou outras linhas de autoatendimento). O desejo de ter programas de TV estridente para você enquanto você bombeia, e dançar bobagens na tela quando não, levou a mais potência. Da mesma forma, as máquinas de coque e água com a garra de dois eixos.
old_timer
@ Justin, bem, sim, claro, o Java precisa se sentar sobre algo para funcionar. Meu argumento foi que ele utiliza uma linguagem de alto nível (comparativamente) como Java.
Andrew Marshall
@ Andrew: E em qual sistema operacional o interpretador Java no blue ray funciona? E em que idioma esse sistema operacional está escrito?
Gunther Piez
18

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!

poundifdef
fonte
2
Muito obrigado! Se eu pudesse escolher outra melhor resposta, teria sido sua. Eu achei muito útil. 1
Josh Leitzel
Os processadores modernos estão surpreendentemente muito preocupados com os sistemas operacionais. Eles fornecem recursos como unidades de gerenciamento de memória , instruções e modos privilegiados e virtualização de hardware . Os sistemas operacionais modernos dependem de alguns desses recursos. Essa é a razão pela qual você não pode ( facilmente ) executar o linux em pequenos microcontroladores.
Mira Weller
12

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

ughoavgfhw
fonte
Isto está errado. Um fator importante no custo de chips de baixo custo é o pacote que carrega o silício. Por esse motivo, é mais barato substituir a lógica discreta por um microcontrolador depois de chegar a algumas dúzias de portas ... mais e uma dúzia de portas não faz muito. A onipresença da MCU aumentou o custo de portões discretos, alterando o equilíbrio. Além disso, a maioria das MCUs low-end não executa nenhum tipo de sistema operacional.
Potatoswatter
7

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.

Thiago Cardoso
fonte
Obrigado pela sua resposta! 1
Josh Leitzel
7

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.

Potatoswatter
fonte
5

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.

Nick Forge
fonte
4

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).

ryyst
fonte
1

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 )

Travis Webb
fonte
Obrigado, não deixe de pesquisar mais sobre isso! 1
Josh Leitzel
1

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.

Nick Steele
fonte
-2

Ouvi de um engenheiro que os trens da Siemens para trens leves ligam os 386s.

luser droog
fonte