Claro, puedes hacer eso.
En una computadora simple, como un “Arduino” (¡Google!), No hay sistema operativo. Es posible que tenga un teclado, pero tal vez la computadora esté dentro de un lavavajillas, o que se esté utilizando para conducir un robot … ¡sin teclado!
Hay MUCHAS situaciones en las que no hay teclado, ni mouse, ni pantalla. La computadora recibe información de botones, interruptores, quizás sensores que detectan la temperatura o el brillo de la luz o algo así.
- ¿Todavía se necesita una tarjeta gráfica incluso si tenemos un procesador Intel Xeon de gama alta?
- Cómo crear una tableta virtual en una computadora
- ¿Qué compañía de computadoras fabrica los portátiles más confiables?
- ¿Cuáles son algunos ejemplos de tecnología que se usa incorrectamente?
- Mecanografía: ¿Cómo me convierto en un mejor mecanógrafo?
Esto se llama “Computación integrada”, y (para mí) es muy divertido.
Para escribir programas para una computadora tan aislada (el “Sistema de destino”), debe usar otra computadora (el “Sistema de desarrollo”) para escribir en ella, y luego descargar el programa en su computadora de destino a través de un cable USB. o tal vez escribiendo el programa en una tarjeta de memoria y conectándolo a la computadora de destino … algo así.
En particular, no necesita saber “binario” (aunque podría ser útil para algo como un robot o una lavadora donde está hablando con hardware especializado). Simplemente puede escribir programas en un lenguaje como C o C ++ que pueda compilarse.
Para ejecutar un compilador, probablemente necesite algo muy parecido a un sistema operativo. Por lo tanto, el compilador no se ejecutará en el sistema de destino, sino en su máquina de desarrollo.
Para tomar un ejemplo específico: estoy trabajando con un amigo que está comenzando una “Sala de escape”. Necesitan un montón de ‘objetos inteligentes’, cosas que saben cuando han sido recogidos, entregados, colocados en un lugar específico … ese tipo de cosas.
Así que elegí una computadora TINY llamada ESP8266, que cuesta $ 2, es más pequeña que mi miniatura, tiene una interfaz WiFi incorporada y una forma de conectarla a un conector USB, muchos pines de repuesto para conectar cosas, y un buena cantidad de memoria “flash” incorporada … no hay un “sistema operativo” real, aunque tiene un software muy primitivo incorporado en su memoria flash para hacer cosas como acceder a la interfaz WiFi … sin embargo, gran parte de eso no es para mi gusto … así que voy a reescribir la mayor parte.
Todo el software de “Desarrollo” (editor de texto, compilador, enlazador, unidad de disco, etc.) se ejecuta en mi PC con Linux (aunque podría estar en una máquina con Windows).
Entonces, así es como funciona:
- Escribo código C ++ en mi PC con Linux usando un editor de texto normal.
- Utilizo una herramienta de Linux llamada “make” para organizar la construcción de mi software de manera eficiente.
- Utiliza una versión especial del “compilador GNU C ++” (g ++) para compilar el software para el procesador que ejecuta ESP8266. Este es un compilador diferente del que usaría para compilar código para ejecutar en la computadora Linux … hay diferentes archivos de encabezado y diferentes archivos de biblioteca.
- Cuando el programa se compila correctamente, uso un programa especial que se comunica desde la máquina Linux a la placa ESP8266 a través de un cable USB. Ese programa descarga el código compilado del paso anterior en la memoria flash del ESP8266. En realidad, hay una pieza especial de hardware que se conecta desde el cable USB al ESP8266 porque esa máquina es demasiado pequeña para tener un conector USB.
- Una vez que mi programa se almacena en la memoria flash de la placa ESP, comenzará a ejecutarse cada vez que enciendo la alimentación de la placa.
- Si dejo la placa ESP conectada a mi PC, entonces mi programa puede enviar texto al puerto USB y leer el texto enviado a través del USB.
- El software llamado “pantalla” en la PC me permite ver lo que el ESP envía desde su puerto USB, y usar el teclado de mi PC para escribir cosas en él.
- Pero en este punto, el sistema ESP NO tiene funciones de “biblioteca estándar”, por lo que no tiene funciones malloc / free, printf, no string, nada de eso. En este momento, no tengo forma de hablar con el puerto USB desde el extremo ESP de las cosas.
- Así que sueldo un botón a un pin del chip ESP y un LED de tres colores (rojo / verde / azul) a otros tres pines … y escribo un programa súper simple que ilumina el LED en un color diferente cada vez que presiona el botón. Este es un programa de 20 líneas sin llamadas a la biblioteca estándar … nada. Funciona muy bien
- Tengo que escribir “malloc” y “free”, y algunos contenedores que hacen que los operadores “nuevos” y “eliminar” de C ++ los usen … y un programa llamado “crt0” que se ejecuta ANTES de “main” y hace que todas las variables globales de C ++ se ser “construido”. Pero debido a que (hasta ahora) no hay teclado ni pantalla, la única forma de depurar esto es encender el LED en diferentes colores para la salida y presionar el botón para ingresar. Depurar este código es algo doloroso … pero tengo un truco bajo la manga …
- En cambio, puedo compilar mi software ESP para que se ejecute en mi caja Linux. Esto me permite probar el código malloc / free para asegurarme de que sea sólido como una roca. Solo cuando funciona de manera confiable en Linux lo pongo en el ESP para probar … ¡con el botón y los LED puedo verificar que las funciones que ejercen el malloc / free son felices porque el LED es verde y no rojo!
- A continuación, escribo algunos “controladores de interrupción” de bajo nivel que hacen que se llame a una función C ++ cada vez que llega un byte USB, o cuando se envía un byte USB. Esto me permite escribir mis propias versiones de “strcpy”, “strcat”, “putchar”, “getchar”, luego “put” y “gets”. Estos son HORRIBLEMENTE difíciles de hacer funcionar con solo un botón y un LED para la depuración, y debido a que se trata de la interfaz de hardware, no puedo probarlo en mi caja Linux antes de ponerlo en el hardware ESP.
- Finalmente puedo hablar con el ESP usando el teclado y la pantalla en mi PC usando USB. HOORAY!
- Luego escribo una versión mínima y simplificada de “printf” y “scanf” … les faltan muchas de las cosas que tienen printf y scanf “reales”, pero son adecuadas para mis necesidades. No quiero un código GRANDE y COMPLICADO en el ESP porque no tiene mucha memoria.
- Las cosas comienzan a ser bastante civilizadas ahora, por lo que puedo comenzar a soldar más hardware en el chip ESP … Agrego un sensor de inclinación y un convertidor digital a analógico casero con amplificador y altavoz. ¡Ahora puedo escribir un programa que emite un pitido cuando inclina el sensor de inclinación!
- Ahora puedo desconectar el ESP de la PC y alimentarlo con una batería.
- ¡Lo celebro haciendo una caja cortada con láser para colocar el sistema de modo que no sea un montón de cables y tableros de prototipos esparcidos por mi escritorio!
- Incline la caja … va “BEEEEEEEEP” hasta que lo nivele nuevamente.
- Escribo una biblioteca de sonidos que puede reproducir un sonido almacenado en un bloque de memoria.
- Escribo un sistema de archivos SIMPLE de solo lectura que tiene un único directorio “plano” y un montón de archivos almacenados consecutivamente en la memoria flash. Escribo una herramienta en Linux que toma todos los archivos en un directorio de Linux en particular y los concatena en un solo archivo y antepone la estructura de mi “directorio” al principio. Entonces puedo ejecutar “mkespfs pathname> file.bin” en Linux, y escribir el archivo resultante en la memoria flash ESP.
- A continuación, escribo “abrir”, “cerrar”, “leer” y “buscar” para mi primitivo sistema de archivos ESP, ¡y ahora puedo “abrir” un archivo y leerlo!
- Ahora puedo volcar un montón de muestras de sonido en un directorio en Linux, ejecutar mi programa mkespfs y luego hacer que el ESP reproduzca el sonido que quiera. ¡Descargo un montón de archivos “WAV” de Internet y hago que mi pequeña caja grazne, grite, explote y demás!
- Todo esto entra en la pequeña caja de corte láser.
- Enciéndalo, póngalo sobre una mesa, y si alguien lo levanta, grita “¡HEY! ¡PONEME ABAJO! “… si no lo haces en 10 segundos, grita” ¡AYUDA! ¡AYUDA! ¡ESTOY ROBADO! ”… y así sucesivamente.
- Procedo a escribir código para interactuar con los controladores WiFi integrados.
- Escribo un servidor HTTP pequeño y minimalista y pongo un montón de archivos HTML en mi unidad flash, ¡y ahora tengo una caja que es solo un poco más grande que tres baterías AAA que tiene un sitio web!
- “Fingí” un sistema de comando CGI que llama a funciones en mi software en lugar de ejecutar un programa separado … ¡ahora “GET” y “POST” funcionan desde mis páginas web!
- Sueldo juntos alrededor de 20 de estas máquinas … más baterías … más cajas cortadas con láser.
- Puedo enviar comandos a cualquiera de mis cajas pequeñas desde mi teléfono, ¡cada una es un sitio web! ¡De modo que puedo ocultar mis pequeños servidores web en la casa y sorprender a la gente haciendo que cualquiera de ellos diga cosas desde una interfaz de página web en mi teléfono cuando estoy a 1000 millas de distancia por negocios!
Ahora, para ser claros, esta es una computadora de $ 2, algunas resistencias y un altavoz dentro de una caja de 1 ″ x1 ″ x3 ″. ¡Las baterías en el interior cuestan más que toda la computadora!
Pero puedo hacer cientos de estos, todos pueden hablar entre ellos … lo que tenemos aquí es el comienzo de mi propio “Internet de las cosas” personal.
Puedo agregar todo tipo de sensores interesantes: estoy trabajando en una interfaz de escáner de “campo cercano”. Luego puedo pegar calcomanías NFC en las cosas y mi pequeña computadora sabrá cuándo se coloca encima de una de ellas, y puede reaccionar de manera autónoma o enviar un mensaje WiFi a un servidor que le dirá qué (si es que hay algo) que hacer .
Tengo un software del lado del servidor que ejecuta un “script de juego” completo e integrado que usted crea con un “lenguaje de programación” gráfico que le permite decir cosas como:
” Si el florero se coloca en el centro de la mesa, dígale al servidor de sonido que reproduzca gritos aleatorios a bajo volumen de los diez generadores de sonido en la habitación, y haga que la imagen en la pared rezuñe sangre de sus ojos ”
Sí, ¡una pequeña bomba y una olla de ketchup conectada a un ESP que acepta comandos WiFi para activar un relé de estado sólido que hace funcionar la bomba durante unos segundos! La máquina sabe cuántas veces puede hacer esto hasta que se agote el depósito de ketchup, y puede decirle al operador que vuelva a llenar el contenedor antes de la próxima ejecución del juego.
Desarrollas una capacidad, un pequeño paso a la vez hasta que tengas algo increíble.
Al final, ¡la gente ni siquiera puede decir que hay computadoras haciendo el trabajo detrás de escena!
Realmente NO NECESITA un sistema operativo para estas cosas, y si quiere algo lo suficientemente pequeño como para esconderse dentro de lugares físicos pequeños y lo suficientemente barato como para tener CIENTOS de ellos en una sola habitación, entonces realmente no puede tener un sistema operativo real