Activa las notificaciones para estar al tanto de lo más nuevo en tecnología.

Tiny BASIC para la plataforma Arduino

Arduino es una tarjeta con un microcontrolador ARM, que se programa usando Sketch, un lenguaje basado en Processing. Todo es de código abierto y la...

tiny-basic-arduino

Arduino es una tarjeta con un microcontrolador ARM, que se programa usando Sketch, un lenguaje basado en Processing. Todo es de código abierto y la verdad es que aprender a usar Sketch no es realmente complicado. Simplemente hay que trabajar un par de semanas con constancia y se verá lo fácil que es programar un Arduino.

Sin embargo, no falta quien busque alternativas a Sketch. El candidato favorito es sin duda el lenguaje BASIC, quizás porque éste fue uno de los primeros que se usó en las computadoras de 8 bits, que se podía programar como intérprete y que no utilizaba mucha memoria, amén de que su conjunto de instrucciones es muy sencillo. Por ello, no es de sorprenderse que ya se haya portado más de una versión de BASIC a esta plataforma. Mike Field hizo este trabajo portando el código en ensamblador de un procesador 68000  creando así Tiny BASIC para Arduino.

El proyecto se basa en el código fuente de Tiny BASIC (ver referencias). Tiny BASIC no es el BASIC mejor pero como un sistema experimental, en donde el autor debe haber aprendido bastante, suena razonablemente interesante. Por ejemplo, Tiny BASIC no tiene THEN después de una instrucción IF. Aparte de ello, un intérprete para Arduino no tiene sentido si no se liga a los puertos de entrada/salida, entre muchas otras características para hacerlo útil. Por eso Field le agregó instrucciones como MOTORS x,y; DELAY <ms> y SENSORS(). Todas estas instrucciones son dependientes de la plataforma por lo que el autor da un mecanismo para añadirlas.

Mike Field además halló que el esquema de memoria usado por Tiny BASIC está equivocado. Y en lugar de lo siguiente:

  1. Código básico (dinámico, crece hacia arriba)
  2. Espacio libre
  3. Variables (tamaño fijo)
  4. Programa que mantiene las llamadas al stack (tamaño fijo, crece hacia abajo)

fue cambiado por:

  1. Variables (tamaño fijo)
  2. Código básico (dinámico, crece hacia arriba)
  3. Espacio libre
  4. Programa que mantiene las llamadas al stack (tamaño dinámico, crece hacia abajo)

Esto permite más llamadas para las funciones FOR/GOSUB  cuando se requiere el stack.

El autor ha hecho una lista de lo que aún hay que hacer, en donde el autor indica que no va a hacer nada de esto, pero que si alguien le quiere meter mano, pues adelante:

  • El espacio en memoria para el programa se pone en tiempo de compilación.
  • Hay muchos trucos que se pueden hacer para reducir el tamaño del código
  • GetLn podría no manejar correctamente los caracteres especiales ((NL & CR, DEL vs CTRL+H, CTRL+C y otros)
  • El evaluador de expresiones es recursivo, y no checa cuanto stack hay disponible. Así, una expresión como ésta: “A=((((((((((B)))))))))”) podría “crashear” al intérprete
  • No se han puesto palabras claves para acceder al hardware de Arduino. Field cree que DELAY <ms>, DOUT <pin> <valor> y AOUT <pin> <valor>, DIN (<PIN>) y AIN(<PIN>) deberían ser implementadas
  • Un mejor uso de las rutinas y mensajes de error es necesario

El código fuente está accesible (ver Referencias) y ya Scott Lawrence se apuntó para hacer las mejoras correspondientes, las cuales pueden verse aquí.

En mi opinión, estos proyectos son muy interesantes y valiosos para aprender. Pienso que los que más han aprendido son los que han hehco el trabajo fuerte, pero podemos todos sacar provecho de esta experiencia, sobre todo porque todo está en código abierto.

Referencias:

Tiny BASIC
Tiny BASIC para Arduino

Comentarios