¿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.
fuente
Respuestas:
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,vuelvaagrabar 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
fuente
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.
fuente
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.
fuente
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!
fuente
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
fuente
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.
fuente
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.
fuente
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.
fuente
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).
fuente
Echa un vistazo a Embedded Systems Magazine y Circuit Cellar
fuente
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 )
fuente
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.
fuente
Un ingeniero me dijo que los trenes de cercanías de tren ligero de Siemens funcionan con 386.
fuente