tipos - ¿Cómo se programan las máquinas de todos los días?
secuenciación de operaciones en máquinas en serie (13)
¿Cómo se programan las máquinas de todos los días (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 un horario preprogramado y comienza a preparar una taza de café horas más tarde, cuando llega ese momento?
¿Este tipo de máquinas tienen sistemas operativos dentro de ellas, o es algo aún más básico? ¿Están escritos en Assembly, 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ódigos subyacentes, posiblemente incluso con el código fuente si es posible. Si alguien sabe de un recurso de este tipo (la búsqueda no produjo nada para mí), sería fantástico.
Eche un vistazo a Embedded Systems Magazine y Circuit Cellar
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 solo un programa en ejecución a la vez, y acceden (y administran) estos recursos , por lo tanto, no necesitan un sistema operativo.
Los sistemas integrados suelen programarse en C y, a veces, en ensamblaje para tiempos extremos u optimización de la memoria. Algunos compiladores integrados le permiten intercalar el ensamblaje dentro de un lenguaje de nivel superior.
Esa es una pregunta muy amplia y depende mucho de la máquina. Solo puedo adivinar que la mayoría de estas máquinas expendedoras están controladas por microcontroladores (8051, PIC, ARM7, por nombrar algunas de las más utilizadas) y rara vez tienen un sistema operativo y, de haberlo, 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.
Escuché de un ingeniero que los Trenes de cercanías Siemens Light-Rail funcionan con 386s.
Estos son sistemas integrados , y se programarían usando un lenguaje de muy bajo nivel como C o ensamblaje. En general, dicho sistema se ejecutará sin un sistema operativo, aunque algunas "máquinas cotidianas" más nuevas, como reproductores de DVD de blue-ray y enrutadores inalámbricos, ejecutan su código sobre un sistema operativo basado en Unix.
ActualizarEn la línea de lo que otros han dicho, muchos sistemas integrados modernos también tienen un sabor de Windows. Depende de la aplicación. Además, hay una tendencia en muchos espacios para ejecutarse en una plataforma más poderosa 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.
Hace poco encontré una máquina expendedora de cigarrillos que ejecutaba Ubuntu (la máquina se estaba reiniciando, así que podía ver el logotipo).
La mayor parte de lo que estás hablando son sistemas integrados en los que 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 máquina está escrito como compilador binario w / oa.
Su cafetera y la mayoría de los sistemas simples como ese no tienen un sistema operativo. Simplemente cargan desde una dirección de inicio en la memoria y colocas tu código allí. A menudo, estos sistemas tienen su "código" grabado en EEPROMS que actúa como el disco duro del sistema. Atornille el código después de grabar las graduaciones, deseche las fichas, vuelva a grabar el código en el chip y comience de nuevo. Hay chips FPGA más nuevos que los dispositivos de gama superior usan para hacer que las pruebas, las implementaciones, etc. sean más fáciles, pero son lo mismo.
Las máquinas de Coca-Cola, los enrutadores, etc. normalmente usan un sistema operativo en tiempo real como QNX, EMBOS o, a veces, RTlinux si tiene suerte. La mayoría de estos son sistemas operativos patentados que usted licencia por mucho dinero, pero tienen compiladores de C, controladores para trabajar con hardware, etc.
http://www.segger.com/cms/embos.html
RTLinux
La mayoría de los quioscos, registros, pantallas de paso e incluso máquinas de café de alta gama y microondas realmente funcionan con Windows XP o Linux, como las máquinas de la serie "Jura Impressa"; puedes SSH en ellos y preparar café.
Aquí hay una secuencia de comandos github de un trabajo cron de la 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, diversos 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, con menos de $ 20, si son más nuevos, se ejecutan en el dispositivo ESP8266 o similar (pueden ejecutar LUA o un servidor de Nodo 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 (Sistema en Chip) como el ESP8266. Simplemente son demasiado fáciles de programar y son un sistema completo en un chip que ejecuta su propio servidor web; solo los enciende, sube su código fuente y tiene un servidor en red por $ 2.
Crecí codificando PICC y AVR y 8051, y estoy triste de verlos partir, pero no he tocado nada más que ESP8266es en años porque son 1/10 del precio y son de un orden de magnitud más fáciles de trabajar con . Puede obtenerlos en placas de desarrollo con paquetes de baterías y diseños de pin explotados por $ 5 en eBay o $ 10 en adafruit.
Los microcontroladores de gama baja que se encuentran en los dispositivos de uso cotidiano generalmente no ejecutan un sistema operativo. Se eligen a 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 interna (de un par de kilobytes a un megabyte ROM, de unos pocos bytes a cien kilobytes de RAM).
A medida que la característica creep funciona su magia, sucede que un microondas puede necesitar una multitarea. En este caso, el programador recuerda su curso de sistemas operativos e implementa paso de mensajes, programación de tareas, E / S asincrónicas, etc., según sea necesario.
Por supuesto, en aras de la conveniencia, la simplicidad, el tamaño del código, etc., las características tienden a realizarse de forma rudimentaria. A menudo depende de cómo se analice el programa, para encontrar la funcionalidad generalizada del sistema operativo dentro del código específico de la tarea. Pero hay un largo camino desde un programador de tareas codificadas 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 partes electrónicas, para aprender sobre los MCU de gama baja. Here 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.
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 deben ser fácilmente actualizables, contendrán un microcontrolador y algún tipo de "sistema operativo". Dado que estos aún tienen algunos límites para su funcionalidad, el sistema operativo será simple y especialmente diseñado. Al avanzar aún más, 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 el código de nivel de usuario y tiene mucha más información del usuario que los dispositivos más simples. Sin embargo, incluso los procesadores modernos son esencialmente circuitos eléctricos muy grandes. Cada instrucción que la CPU reconoce causará que se use un circuito diferente para realizar esa función.
Aquí hay algunas páginas de Wikipedia que pueden interesarle:
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
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 "programas".
Enciende la computadora, el procesador apunta a la primera instrucción y comienza a ejecutarse.
En su escritorio, comienza a ejecutar el "sistema operativo". Pero no hay ninguna razón para que el procesador no pueda ejecutar ninguna de las instrucciones que elija. (Esto puede no ser muy útil, ya que aún desea generar resultados en la pantalla, y esa funcionalidad reside en el SO.) Al mismo tiempo, si las instrucciones de su máquina consistían en los códigos de operación correctos para que el procesador emitiera la secuencia correcta de señales para pintar una imagen en el monitor, mucho mejor. No se necesita sistema operativo
Los escritorios hacen tantas cosas que generalmente requerimos la abstracción de un sistema operativo. Pero en su núcleo, todo lo que hace el procesador es ejecutar instrucciones.
Lo mismo para el procesador en máquinas de Coke y máquinas de café. Todo lo que hace es ejecutar instrucciones.
Bueno, escribir instrucciones de la máquina poco a poco es tedioso. Entonces, al igual que con los escritorios, normalmente escribimos código en C, que luego se compila en código máquina. Ese código de máquina se carga en el procesador integrado y se ejecuta.
Los sistemas integrados hacen tan poco que no necesitan sistemas operativos completos. Un microcontrolador puede tener 8 o 16 pines en el chip, en comparación con decenas de pines en el zócalo de su CPU habitual.
Entonces, el flujo de trabajo es escribir algún código (por ejemplo, en C), compilarlo en su máquina de escritorio. Ese compilador genera código de máquina para el chip integrado. Luego, ese código se carga en el microprocesador (y necesita hardware especial para hacerlo). Luego, enciende el chip y comienza a ejecutar las instrucciones. ¡Sencillo!
Si buscas información general en Google, busca elementos como "sistemas integrados", "soc" (sistema en un chip). Diría que una gran parte de este tipo de dispositivos se ejecuta en lenguajes de bajo nivel, como C.
Dato curioso: Java se concibió originalmente como una solución para la programación de sistemas integrados: http://en.wikipedia.org/wiki/Oak_(programming_language )
Usan 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 incorporados e implementar los controladores de interrupción. Los lenguajes utilizados son ensamblados y C. Los trabajos de depuración difíciles requieren un emulador en el circuito.
Hay mucho espacio para crecer más allá de esto, con núcleos incrustados de 32 bits (ARM es el gorila de 100 libras) que arranca una versión incrustada de Linux y / o Java JVM.