Autor: Oscar Gonzalez
Tiempo de lectura: 10 minutos
Kit de iniciación creado por Madmachine para programar microcontroladores con el lenguaje Swift de Apple
Para aquellas personas que no están familiarizadas con Swift, lo consideran un lenguaje de programación de uso exclusivo de Apple. Pero sabemos que eso no es el todo correcto. Swift es un lenguaje de programación moderno, seguro, eficiente y, sobre todo, multiplataforma. Por eso puede ser una muy buena opción para hacer que este lenguaje funcione en el mundo de los microcontroladores.
Antes de comenzar, puedes echar un vistazo a la definición de Clang aquí, se describe como una interfaz de familia de lenguaje C para LLVM. Del mismo modo, Swift es una interfaz de lenguaje Swift para LLVM, ¿suena extraño? Un poco.
Arquitectura del compilador LLVM Frontend-Backend (Source: Swift, C, LLVM Compiler Optimization)
Swift aprovecha todas las infraestructuras de LLVM, por lo que no necesita implementar varios backends de arquitectura. Pero aún queda mucho trabajo por hacer. El equipo oficial de Swift se centra principalmente en arquitecturas x86-64 y ARM Cortex-A. Gracias a la buena infraestructura de LLVM, lo que se hizo fue combinar el backend ARM Cortex-M existente con el código fuente del compilador Swift. Es tan natural que no solo Madmachine pensó de esta manera. Otros proyectos comenzaron con la misma base:
Muchos están probando diferentes formas de explorar nuevas posibilidades en este campo completamente nuevo y comparten la misma curiosidad y pasión. A diferencia de swift-project1 y swift-embedded que se ejecutan completamente en servidores físicos o "bare-metal", SwiftIO usa Zephyr RTOS para abstraer el hardware de bajo nivel. De esta manera, no necesitamas programar los controladores de esos dispositivos en chip, como I2C, UART, SPI, etc. Y sería muy conveniente portar esto a otros microcontroladores. La estructura del framework es la siguiente:
Estructura del Framework de SwiftIO
En su esencia, el programa de salida del compilador será swiftio.bin, que será cargado y ejecutado en la placa. Gracias a un bootloader que ya viene preinstalado, se ejecutan una serie de procesos que se reflejan en éste gráfico de bloques:
Flujo de ejecución de un programa en SwiftIO
Comparativa entre SwiftIO y otras plataformas
Arduino dio origen e inició de forma fácil el acceso a la programación de microcontroladores y obtuvo un gran éxito. Además, muchos proyectos de código abierto basados en Arduino también tuvieron bastante éxito. Arduino es el intento más exitoso de simplificar la API del hardware. Su sistema de programación utilizar C / C , sin embargo, abstrae todos los dispositivos en chip y ofrece una API fácil de usar para los desarrolladores. A través de una larga evolución y acumulación, ahora puedes encontrar fácilmente muchos ejemplos y tutoriales de Arduino para diferentes módulos de hardware. Hace que el desarrollo de hardware sea tan simple y divertido como jugar con LEGO.
Python se ha vuelto muy popular en los últimos años. Comparado con C / C , es muy fácil de aprender. Como lenguaje interpretado, los usuarios pueden ver los resultados inmediatamente sin necesidad de compilar el código. Para realizar MicroPython, Damien George creó un intérprete eficiente usando C. Esto hace que se ejecute en microcontroladores con recursos extremadamente limitados. De esta manera, los desarrolladores pueden usar Python en diferentes microcontrolador.
Sin embargo, es necesario el uso de un intérprete de Python. Esto hace que las placas deban disponer de microcontroladores potentes de tipo Cortex para poder ejecutarlo y puede no ser tan eficiente.
Raspberry Pi, de hecho, es totalmente diferente ya que en realidad, es una pequeño ordenador bien equipado en un pequeño tamaño. Ejecuta un sistema operativo Linux completo, puedes conectar un teclado, un ratón, discos duros y pantallas. La única similitud con los microcontroladores puede ser algunos dispositivos e interfaces comunes como los pines GPIO, I2C, SPI, que también pueden ser controlados por Swift (versión Linux).
Raspberry Pi está construida sobre hardware y software complejos. Diseñar una placa que pueda ejecutar Linux es mucho más difícil que una placa de microcontrolador, además, la placa debe adaptarse al sistema Linux, que es aún más complicado. Sería sin embargo posible hacer funcionar Swift sobre Raspberry Pi.
SwiftIO pinout