Robots Móviles
Software y documentación para robots móviles
|
English
|
|
RAS - Mobile Robot Assembler
Mobile Robot Assembler (RAS) es un ensamblador para robots móviles y,
en general, cualquier sistema basado en microcontroladores Motorola 68HC11, multiplataforma,
ampliable y libre.
En la versión actual reconoce el conjunto de instrucciones completo de
la familia de microcontroladores MC68HC11 y algunas directivas
(básicamente, ORG, EQU y de reserva de memoria) que se comentan en la
documentación.
Si no estás interesado en otras alternativas para la programación
de estos micros ni las características y motivaciones del
Mobile Robot Assembler (RAS) puedes ir directamente a la zona de Download.
Otras alterntivas
Motorola distribuye un ensamblador para su MC68HC11 sobre el que Randy Sargent
efectuó unas pequeñas modificaciones. Se trata del ampliamente
conocido y utilizado as11. Es un
ensamblador relativamente limitado en cuanto a prestaciones se refiere, por
ejemplo, no pueden crearse macros y todo el código del programa
que estemos realizando debe ir en el mismo fichero fuente. Esto hace que sea
relativamente incómodo trabajar con él. No obstante, ofrece
buenos resultados incluso para programas de cierta complejidad.
Dentro del mundo de los ensambladores, otra posibilidad es usar el GNU
Assembler. Se trata de un muy buen producto y con la garantía de
GNU pero que para el no iniciado puede resultar relativamente complicado
principalmente en el comienzo. Dispone de todo lo que puede pedirse a un
ensamblador, una buena documentación y, sobre todo, su carácter
abierto.
También es posible usar el C/C++ como lenguaje base, muy cercano al
ensamblador por otra parte. En este ámbito, la herramienta más
utilizada y portable es el compilador GNU C/C++. Al
igual que el GNU Assembler, antes comentado, en inicio puede resultar un tanto
complicado.
En las FAQ del
68HC11 se comentan y se aportan direcciones de otros lenguajes y sistemas
de desarrollo en los que programar este microcontrolador.
Motivación
La idea principal a la hora de crear un nuevo ensamblador teniendo en cuenta
los antecedentes que hemos mencionado es definir un entorno de desarrollo
sobre el que puedan proporcionarse, de una forma más o menos sencilla,
nuevas instrucciones a partir de otras ya existentes. Estas nuevas
meta-instrucciones generarán el código correspondiente a
operaciones habituales en el desarrollo de programas para robots
móviles como por ejemplo encender conversores, lectura de puertos
asociados a sensores, comandos de movimiento, etc.
El objetivo final es disponer de un lenguaje para robots móviles de
alto nivel constituido por una biblioteca de meta-instrucciones incluidas en
el propio lenguaje y construidas en el propio lenguaje.
En el nivel más básico tenemos un lenguaje con el que programar
nuestro sistema de control. Sobre él se situarán algunas
funciones habituales en este tipo de sistemas. En niveles superiores
podrán definirse comportamientos básicos del robot como por
ejemplo el conocido seguir-línea o incluso una arquitectura de control
de robots móviles.
Utilizar el ensamblador como lenguaje base se debe a que podemos aprovechar al
máximo los escasos recursos con los que contemos en nuestro sistema de
control del robot. Generalmente se tratan de sistemas dotados con poca memoria
y una velocidad de procesamiento baja. Cuanto más potente y depurada
sea nuestra biblioteca de meta-instrucciones menos código en
ensamblador tendremos que crear.
Características
- Versión 0.1.2 (16-Abr-2001)
- Nuevo
- Directiva RMB para la reserva de memoria.
- Directiva ZMB para la reserva de memoria con
inicialización a cero de cada posición.
- Bugs corregidos
- Correción de errores menores en la fase de generación
de código.
- Versión 0.1.1 (12-Mar-2001)
- Nuevo
- Distribución en RPM.
- Opciones de instalación y desinstalación en
Makefile y scripts para GNU/Linux.
- Bugs corregidos
- Las instrucciones BRSET y BRCLR tenían un
comportamiento erróneo cuando la dirreción de comienzo
del programa no era la $0000.
- Versión 0.1.0 (06-Mar-2001)
- Nuevo
- Nueva opción -v que muestra algunos resultados de la
fase de ensamblado (la longitud del código generado, el área
de memoria usada por el programa, etc.).
- Nueva directiva FCC para definir cadenas de caracteres. Se
utliza el símbolo " como delimitador de la cadena. Para
incluir un " en la cadena, simplemente repítase ese
carácter dos veces (ejemplo, "la ""casa"" blanca").
- Modificaciones
- Ahora las directivas FCB y FBD son compatibles con
el ensamblador as11, es decir, se permiten varios valores
(simbólicos y numéricos) separados por comas en cada
directiva y no es obligatorio el uso de etiqueta.
- Se han modificado algunas funciones asociadas con la gramática
y algunas estructuras de datos para mejorar el rendimiento general del
programa.
- Bugs corregidos
- Ahora, si se detecta un error de símbolo duplicado y el
símbolo está en dos ficheros fuente diferentes (cuando se
usa la directiva include), en el mensaje de error se muestra el
nombre del fichero y número de línea de ese fichero en la
que se encuentra la segunda occurrencia del
símbolo. Anteriormente, el nombre del fichero mostrado era el del
fichero principal por lo que no correspondía el número de
línea con el nombre del fichero.
- Versión 0.0.3 (27-Feb-2001)
- Nuevo
- Directiva include que incluye un fichero fuente desde
otro. La directiva utiliza como argumento el nombre del fichero que va a
ser incluido (por ejemplo, include fichero.asm) y realiza una
macroexpansión. Los símbolos y las etiquetas se tratan como
globales, su redefinición provocará un error de
compilación. Se permiten diez niveles de profundidad en
inclusiones.
- Bugs corregidos
- Ahora, si no se usa una directiva ORG al inicio del programa,
se usa la dirección $0000 como valor por defecto para el
código generado.
- En la versión DOS/Windows, los fines de línea pueden
estar compuestos por caracteres CR y LF. No es necesario utilizar
ningún editor especial.
- Versión 0.0.2 (12-Feb-2001)
- Nuevo
- Nuevas directivas FCB y FBD para la reserva de
memoria (variables) de 1 y 2 bytes, respectivamente.
- Nueva página de manual (man).
- Mejoras
- Las etiquetas pueden acabar con el carácter `:' en el
campo de etiqueta pero no se tiene en cuenta en su utilización en
una intrucción como operando.
- Cuando no se especifica el offset en los direccionamientos indexados
(por ejemplo CLR ,X) se asume que el offset es 0.
- Las constantes ASCII están permitidas anteponiendo el prefijo
' al valor de la constante (por ejemplo LDAA 'B, carga
en el acumulador A el valor ASCII del carácter B). Si lo
que sigue a ' es un literal, sólo se tiene en cuenta el
primer carácter.
- No se tiene en cuenta las mayúsculas y minúsculas en los
mnemónicos (case-insensitive) pero sí en etiquetas y
símbolos.
- En las bifurcaciones (branch) se comprueba que el valor
esté dentro del rango [-128 .. +127].
- Bugs corregidos
- En el valor de salida del programa (0 si no hay errores, 1 en caso
contrario).
- En la generación de código cuando una directiva
ORG solapaba las direcciones de memoria a las que se llegaba
con el código.
- Las etiquetas pueden tener el mismo nombre que los mnemónicos,
el tipo de símbolo se obtiene del contexto (por ejemplo BRA
stop).
- Versión 0.0.1 (09-Feb-2001)
- Conjunto completo de instrucciones, compatibles con el ensamblador
de Motorola.
- Directivas EQU y ORG.
- Métodos de direccionamiento inherente, inmediato, directo,
extendido, indexado y relativo.
- Detección de errores sintácticos y semánticos
(comprobación de los tamaños de los operandos).
- Opciones de depuración (tabla de símbolos y código
intermedio).
Bugs conocidos
- No detecta correctamente que el código fuente incluya errores
del tipo "$#10", es decir, que esté mal expresado un
direccionamiento inmediato con un operando hexadecimal (la expresión
correcta sería "#$10"). Se puede detectar este error ya que
el comando de shell devuelve un símbolo "$".
Pendiente
- Listados de salida del ensamblador con ciclos de procesador.
- La primera meta-instrucción.
Download
Enlances adicionales
Agradecimientos
Gracias a Juan González por las pruebas, porting a DOS/Windows y
preparación de la distribución RPM. Gracias también a Cecilio Ruiz por las
pruebas y sugerencias.
Importante
Esto es software libre; vea el código fuente o las licencias cuyos
enlaces están en el apartado de Download para
las condiciones de copia. No hay NINGUNA garantía; ni siquiera de
COMERCIABILIDAD o IDONEIDAD PARA UN FIN DETERMINADO.
La versión actual está en fase BETA. Durante la fase de pruebas
interna se ha verificado que cada instrucción y direccionamiento
generan el mismo código que el ensamblador as11. Los programas
de prueba que, por otra parte, no tienen ningún sentido lógico y
NO DEBEN SER CARGADOS en el micro, se distribuyen junto con los fuentes.