¿Cómo se programan las máquinas cotidianas?

147

¿Cómo se programan las máquinas cotidianas (no tanto computadoras y dispositivos móviles como electrodomésticos, relojes digitales, etc.)? ¿Qué tipo de código entra en la programación de una máquina expendedora de Coca-Cola? ¿Cómo acepta mi cafetera una hora preprogramada y comienza a preparar una cafetera horas más tarde, cuando llega esa hora?

¿Este tipo de máquinas tienen sistemas operativos dentro de ellas, o es algo aún más básico? ¿Están escritos en ensamblador, C o en algún otro idioma?

Y realmente me gustaría encontrar algún recurso que enumere estos sistemas operativos o sistemas de código subyacentes, posiblemente incluso con el código fuente si es posible. Si alguien conoce un recurso de este tipo (la búsqueda no produjo nada para mí), sería fantástico.

Josh Leitzel
fuente
12
Fantástica pregunta! Me he estado preguntando lo mismo.
Jonathan Sterling
77
Realice algunas búsquedas / investigaciones sobre "sistemas integrados" (incluso agregué la etiqueta).
mu es demasiado corto el
InRe los votos cerrados: no veo esto como material para programadores porque se trata de programación . Por otro lado, podría funcionar bien en el sitio de electrónica de SE, simple porque habrá más especialistas. La respuesta, por supuesto, es algo de todo lo anterior. Tendrá que elegir una clase más pequeña antes de poder obtener una respuesta.
dmckee --- ex-gatito moderador
Su pregunta muy amplia que cubre al menos 3 disciplinas de ingeniería y muchos tonos intermedios.
Jodrell
FWIW, puede estar interesado en jugar con una plataforma de microcontrolador como Arduino (~ $ 30) arduino.cc .
steamer25

Respuestas:

47

La mayor parte de lo que estás hablando son sistemas basados ​​en incrustaciones donde C es un lujo que a menudo no está disponible. No tienen software en el sentido tradicional. La mayoría de las veces el software está escrito en C, ensamblado o incluso en código de máquina. C y ASM requieren que los compiladores se escriban para usarlos para esa plataforma. El código de máquina se escribe como binario sin un compilador.

Su cafetera y la mayoría de los sistemas simples como ese no llevan un sistema operativo. Simplemente se cargan desde una dirección de inicio en la memoria y pones tu código allí. A menudo, estos sistemas tienen su "código" grabado en EEPROMS que actúa como el disco duro del sistema. Arruine el código después de quemar las fiestas de graduación, deseche los chips, vuelva a grabar el código en el chip y comience de nuevo. Hay chips FPGA más nuevos que utilizan los dispositivos de gama alta para facilitar las pruebas, la implementación, etc., pero son lo mismo.

Las máquinas de Coca-Cola, los enrutadores, etc. generalmente usan un sistema operativo en tiempo real como QNX, EMBOS o, a veces, RTlinux si tienes suerte. La mayoría de estos son sistemas operativos propietarios que usted licencia por mucho dinero, pero tienen compiladores C, controladores para trabajar con 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
fuente
35
¿Gente codificando en binario? Los ensambladores son tan estúpidamente simples de escribir que me resulta difícil de creer. ¿Tienes una fuente para esto? Además, esta respuesta da la falsa impresión de que todos los sistemas contienen un microprocesador que ejecuta código. Aunque esto se está volviendo más popular a medida que los microcontroladores y EEPROM (que facilitan la depuración y la actualización) se vuelven más baratos, todavía no vale la pena para sistemas muy baratos, o sistemas que no han cambiado mucho en los últimos 20 años. Por ejemplo, algunos relojes digitales.
BlueRaja - Danny Pflughoeft
66
Esto simplemente se afirma con demasiada fuerza. No necesita alojar el compilador en el destino. Los compiladores cruzados son muy comunes en la programación integrada.
dmckee --- ex-gatito moderador
12
¿Una máquina de coque con QNX? WTF: ¡ese es otro tipo de coca cola! Y sí, hay un compilador de C para cada plataforma que actualmente se envía en volumen. Nadie quiere escribir ensamblaje, la falta de C sería una gran desventaja. (Algunos compiladores no son muy buenos ,
claro
8
Además, EEPROM por definición puede reescribirse 100000+ veces. Los recuerdos de escritura única son obsoletos; Todos los microcontroladores populares de hoy tienen Flash. FPGA es un mercado completamente diferente de MCU de gama baja ... no tienes idea de lo que estás hablando.
Potatoswatter
77
Tengo un amigo que trabaja en máquinas expendedoras que son bastante complejas. Tienen radios celulares, monitorean el inventario, rastrean la temperatura, informan cifras financieras y envían llamadas HTTP a los servidores para agregar todos estos datos para que pueda rastrear todas sus máquinas. Y sí, estas marcas de máquinas están utilizando un sistema operativo incorporado. Creo que están usando RTLinux con C. Entonces sí, incluso la máquina expendedora se está volviendo lo suficientemente compleja como para garantizar el sistema operativo incorporado.
chubbsondubs
29

Utilizan microcontroladores, el 8051 es el clásico. Estos son núcleos de 8 bits o 16 bits, rara vez tienen un sistema operativo. El programador escribe el código para inicializar los periféricos integrados e implementar los manejadores de interrupciones. Los lenguajes utilizados son ensamblado y C. Los trabajos de depuración difíciles requieren un emulador en circuito.

Hay mucho espacio de crecimiento más allá de esto, con núcleos integrados de 32 bits (ARM es el gorila de 100 libras) que arranca una versión integrada de Linux y / o Java JVM.

Hans Passant
fuente
55
Es un gorila bastante pequeño, pero supongo que las restricciones de poder son bastante importantes con los grandes simios incrustados;)
Piskvor abandonó el edificio el
¡Gracias! Tu respuesta fue útil para mí y te he dado un voto positivo.
Josh Leitzel
Los chips ARM también están ingresando en el extremo inferior ... con precios <1 USD, huella de 2x2 mm.
domen
24

Estos son sistemas integrados y se programarían con un lenguaje de muy bajo nivel, como C o ensamblado. En general, dicho sistema se ejecutará sin un sistema operativo, aunque algunas "máquinas cotidianas" más nuevas, como los reproductores de DVD blue-ray y los enrutadores inalámbricos, ejecutan su código sobre un sistema operativo basado en Unix.


Actualizar

En línea con lo que otros han dicho, muchos sistemas embebidos modernos también tienen un sabor de ventanas. Depende de la aplicación. Además, hay una tendencia en muchos espacios para ejecutarse en una plataforma más potente con un sistema operativo, para manejar casos como los reproductores Blue-ray que necesitan ejecutar Java y otras instancias donde el usuario final desea más funcionalidad.

Justin Ethier
fuente
Para aclarar, Bluray usa Java.
Andrew Marshall
66
Quizás, pero los jugadores reales ejecutan Linux y están escritos en C / C ++
Justin Ethier
Las cajas registradoras y las bombas de gasolina y similares funcionaban con dos (algunas marcas), lamentablemente algunas de esas ventanas ahora (tienda de comestibles u otras líneas de autopago). El deseo de tener programas de televisión a todo volumen mientras bombeas gasolina y bailar en la pantalla cuando no, ha llevado a más caballos de fuerza. Del mismo modo, las máquinas de coque y agua con el agarrador de dos ejes.
old_timer
@Justin, bueno, sí, por supuesto, Java necesita sentarse sobre algo para funcionar. Mi punto era que utiliza un lenguaje de alto nivel (comparativamente) como Java.
Andrew Marshall
@ Andrew: ¿Y en qué sistema operativo funciona el intérprete de Java en el Blue Ray? ¿Y en qué idioma está escrito ese sistema operativo?
Gunther Piez
18

Pensemos en el procesador en su escritorio. Todo lo que hace es ejecutar las instrucciones de la máquina y, por sí solo, no está realmente preocupado por los "sistemas operativos" o los "programas".

Enciende su computadora, el procesador señala la primera instrucción y comienza a ejecutarse.

En su escritorio, comienza a ejecutar el "sistema operativo". Pero no hay ninguna razón por la que no pueda hacer que el procesador ejecute cualquier conjunto de instrucciones que elija. (Esto puede no ser muy útil, ya que aún querría mostrar los resultados en la pantalla, y esa funcionalidad reside en el sistema operativo). Al mismo tiempo, si las instrucciones de su máquina consisten en los códigos de operación correctos para que el procesador salga la secuencia correcta de señales para pintar una imagen en el monitor, mucho mejor. No se necesita sistema operativo.

Las computadoras de escritorio hacen tantas cosas que generalmente requerimos la abstracción de un sistema operativo. Pero en esencia, todo lo que hace el procesador es ejecutar instrucciones.

Lo mismo para el procesador en máquinas de Coca-Cola y máquinas de café. Todo lo que hace es ejecutar instrucciones.

Bueno, escribir las instrucciones de la máquina poco a poco es tedioso. Entonces, al igual que con los escritorios, generalmente escribimos código en C, que luego se compila en código de máquina. Ese código de máquina se carga en el procesador incorporado y se ejecuta.

Los sistemas integrados hacen tan poco que no necesitan sistemas operativos completos. Un microcontrolador podría tener 8 o 16 pines en el chip, en comparación con los puntajes de pines en su zócalo de CPU normal.

Entonces, el flujo de trabajo es escribir algún código (digamos, en C), compilarlo en su máquina de escritorio. Ese compilador genera código de máquina para el chip incorporado. Luego, ese código se carga en el microprocesador (y necesita un hardware especial para hacer esto). Luego enciende el chip y comienza a ejecutar instrucciones. ¡Sencillo!

poundifdef
fuente
2
Muchas gracias! Si hubiera podido elegir otra mejor respuesta, habría sido la suya. Lo encontré muy útil. +1
Josh Leitzel
Los procesadores modernos están sorprendentemente muy preocupados por los sistemas operativos. Proporcionan características como unidades de administración de memoria , instrucciones y modos privilegiados y virtualización de hardware . Los sistemas operativos modernos dependen de algunas de estas características. Esa es la razón por la que no puede ( fácilmente ) ejecutar Linux en microcontroladores pequeños.
Mira Weller
12

Muchos dispositivos que realizan una función específica no contienen ningún "código". Realizan sus funciones a través de las propiedades de sus componentes electrónicos. Los sistemas más avanzados, que pueden realizar muchas funciones diferentes o necesitan ser fácilmente actualizables, contendrán un microcontrolador y algún tipo de "sistema operativo". Dado que estos todavía tienen algunos límites en su funcionalidad, el sistema operativo será simple y especialmente diseñado. Cada vez más avanzado, el dispositivo contendrá algo similar a una computadora. Tendrá un sistema operativo más complicado que puede comunicarse con diferentes partes del sistema. Finalmente, llega a dispositivos como teléfonos inteligentes, que contienen un sistema operativo completo que puede ejecutar código de nivel de usuario y tener mucha más información de usuario que dispositivos más simples. Sin embargo, Incluso los procesadores modernos son esencialmente circuitos eléctricos muy grandes. Cada instrucción que reconoce la CPU hará que se utilice un circuito diferente para realizar esa función.

Aquí hay algunas páginas de Wikipedia que te pueden interesar:

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
fuente
Esto está mal. Un factor importante en el costo de los chips de bajo costo es el paquete que lleva el silicio. Por esta razón, es más barato reemplazar la lógica discreta con un microcontrolador una vez que llegue a un par de docenas de puertas más o menos ... y una docena de puertas no hacen mucho. La ubicuidad de MCU ha elevado el costo de las puertas discretas, cambiando el equilibrio. Además, la mayoría de las MCU de gama baja no ejecutan ningún tipo de sistema operativo.
Potatoswatter
7

Esa es una pregunta muy amplia y depende mucho de la máquina. Solo puedo suponer que la mayoría de estas máquinas expendedoras están controladas por microcontroladores (8051, PIC, ARM7, por nombrar algunos de los más utilizados) y rara vez tienen un sistema operativo y, si lo tiene, sería algún tipo de RTOS, como FreeRTOS .

Máquinas más complejas, como reproductores de DVD / BluRay o teléfonos móviles, se ejecutan sobre plataformas sofisticadas, como OMAP4 . Por lo general, un sistema operativo Unix se ejecuta en ellos.

Thiago Cardoso
fuente
¡Gracias por su respuesta! +1
Josh Leitzel
7

Los microcontroladores de gama baja que se encuentran en los dispositivos cotidianos generalmente no ejecutan un sistema operativo. Se eligen por bajo costo, y los principales factores que impulsan ese costo son la cantidad de pines en el chip (de una docena a un par de cientos) y la cantidad de memoria en el interior (de un par de kilobytes a una megabyte ROM, de unos pocos bytes a cien kilobytes de RAM).

A medida que la función creep funciona mágicamente, sucede que un microondas puede necesitar realizar múltiples tareas. En este caso, el programador recuerda su curso de sistemas operativos e implementa la transmisión de mensajes, la programación de tareas, las E / S asíncronas, etc., según sea necesario.

Por supuesto, en aras de la conveniencia, simplicidad, tamaño del código, etc., las características tienden a realizarse de manera rudimentaria. A menudo depende de cómo analice el programa, para encontrar la funcionalidad generalizada del sistema operativo dentro del código específico de la tarea. Pero es un largo camino desde un programador de tareas codificado hasta un sistema operativo, y cuando solo tiene unos pocos kilobytes para trabajar, un sistema operativo estándar no es la solución.

Eche un vistazo a DigiKey, un popular sitio de selección de piezas electrónicas, para conocer los MCU de gama baja. Aquí está su información sobre un MCU muy barato con un controlador LCD, como el que se puede encontrar en una máquina de café. Es bastante fácil obtener el manual de programación y todo.

Potatoswatter
fuente
5

El trabajo de un sistema operativo es proporcionar acceso compartido a los recursos: tiempo de ejecución de la CPU, RAM, E / S, etc. La mayoría de los sistemas integrados basados ​​en microcontroladores simples tienen un solo programa ejecutándose a la vez, y acceden (y administran) estos recursos ellos mismos , por lo tanto, no necesitan un sistema operativo.

Los sistemas integrados generalmente se programan en C y, a veces, en ensamblaje para una sincronización extrema u optimización de la memoria. Algunos compiladores integrados le permiten entremezclar ensamblajes dentro de un lenguaje de nivel superior.

Nick Forge
fuente
4

Recientemente me encontré con una máquina expendedora de cigarrillos que ejecutaba Ubuntu (la máquina se estaba reiniciando, así que podía ver el logotipo).

ryyst
fuente
1

Si buscas información general en Google, busca cosas como "sistemas integrados", "soc" (sistema en un chip). Yo diría que una gran parte de estos tipos de dispositivos se ejecutan en lenguajes de bajo nivel, como C.

Dato curioso: Java fue concebido originalmente como una solución para la programación de sistemas integrados: http://en.wikipedia.org/wiki/Oak_(programming_language )

Travis Webb
fuente
¡Gracias, me aseguraré de investigarlos más! +1
Josh Leitzel
1

La mayoría de los quioscos, registros, pantallas drive-thru e incluso cafeteras y microondas de alta gama realmente ejecutan Windows XP o Linux, como las máquinas de la serie "Jura Impressa"; puedes usar SSH en ellos y preparar café.

Aquí hay un script github de un trabajo cron de una máquina de café: https://github.com/NARKOZ/hacker-scripts/blob/master/fucking_coffee.rb

La mayoría de los enrutadores, hornos más nuevos, refrigeradores más nuevos, automóviles, reproductores de DVD, varios productos electrónicos, productos de automatización del hogar más nuevos, incluidas las bombillas, ejecutan una versión de ARM Linux o Linux incorporado.

La mayoría de los dispositivos más baratos, de menos de $ 20, si son más nuevos, se ejecutan en el ESP8266 o un dispositivo similar (puede ejecutar LUA o un servidor Node reducido por $ 2 a granel - increíblemente barato)

http://nodemcu.com/index_en.html

El uso de FPGA y sistemas integrados como 8051, Z80 u otros dispositivos integrados como PICC, AVR y Arduino pronto serán reemplazados por sistemas todo en uno / SoC (System on Chip) como ESP8266. Simplemente son demasiado fáciles de programar y son un sistema completo en un chip que ejecuta su propio servidor web; simplemente enciéndalos, cargue su código fuente y tendrá un servidor en red por $ 2.

Crecí codificando PICC y AVR y 8051, y estoy triste de verlos desaparecer, pero no he tocado nada más que ESP8266es en años porque son 1/10 del precio y son un orden de magnitud más fáciles de trabajar. . Puede obtenerlos en placas de desarrollo con paquetes de baterías y diseños de pines explotados por $ 5 en eBay o $ 10 en adafruit.

Nick Steele
fuente
-2

Un ingeniero me dijo que los trenes de cercanías de tren ligero de Siemens funcionan con 386.

luser droog
fuente