OSS/FSJune 30, 2005 9:46 pm

Finalmente me di mañas para aprender a usar cvs, y me parece genial,
es la primera vez que utilizo una herramienta de estas y hace el llevar
el progreso de un desarrollo mucho más controlado.

Así que en la interface CVS que se encuentra en el proyecto de SourceForge
van a estar los desarrolllos activos, cuando se encuentre alguno de los
proyectos actuales con el nivel de madurez que tiene el proyecto de instrumentación
será publicado como un release.

El repository de CVS:

  • instrumentación tiene un proyecto maduro pero
    sin información adecuada para el montaje en hardware.
  • tools se encuentra una herramienta avr-mem
    para medir el uso de recursos de memoria utilizados por los binarios
    Originalmente este script se encuentra con WinAVR y según recuerdo
    no funcionaba transparentemente en mi shell así que lo modifique
    un poco para que fucnionara, por eso lo publico.
  • testing Aparecen los proyectos o ideas con desarrollo
    más activo.

EOT

TutorialesJune 25, 2005 8:20 pm

Bien encontre un post apropiado del blog anterior continuando con el desarrollo
de las herramientas.

Para ver los cables de programación en la documentación de UISP
se encuentran los cables soportados.
He probado con exito:

  • dapa que es un cable del puerto paralelo a los pines del micro.
  • xil que es el cable jtag que viene con las boards xilinx, el que probe viene
    con la tarjeta de evaluación de una fpga spartan3, gracias a medrano por la ayuda con el testing con este cable y un atmega16

La mejor forma de utilizar las GNUTools es creando un
Makefile apropiado, que sea fácil de reutilizar.
Este envio cubre este aspecto y como utilizar todas
las herramientas y el wrapper(Makefile) para crear la aplicación
de prueba.

Un archivo Makefile contiene las reglas e instrucciones
requeridas para compilar, en principio esta pensado para
esa tarea, sin embargo la flexibilidad permite que
sea utilizado en otras tareas.

Bien, el programa make cuando se invoca desde la
linea de comando busca el archivo Makefile o makefile en el
directorio actual, también puede ser especificado un
archivo diferente para obtener las reglas.

Sin embargo tener los proyectos separados en directorios
y con su propio Makefile ayuda a organizar el trabajo.

Esta es una cabecera adecuada para iniciar el archivo:

#Cambiar al nombre del proyecto
FILE=proyecto
#Especificar el micro para el cual se va a compilar
MCU=micro
#Especificar el método de programación
CABLE=dapa

#Herramientas de compilación.

CC=avr-gcc
XXD=xxd
OBJCOPY=avr-objcopy
OBJDUMP=avr-objdump

CFLAGS= -g -Wall -mmcu=$(MCU)

all: $(FILE).hex

Luego se especifican las reglas de compilación.

%.o:%.c
<- TAB ->$(CC) -c -o $*.o $(CFLAGS) $(ECOS_GLOBAL_CFLAGS) $<

%.hex: %.elf
$(OBJCOPY) -j .text -j .data -O ihex $< $*.hex
$(OBJDUMP) -h -S $< > $*.listing

%.elf: %.o
$(CC) $(CFLAGS) -o $*.elf -Wl,-Map,$(FILE).map $<

Estas reglas permiten la mayor generalidad pero en ocasiones
no son suficientes y es importante conocer el compilador
para añadir las modificaciones pertinentes.

Por ejemplo muchas veces es deseable distribuir el proyecto
en varios objetos antes de enlazarlos o se han creado
cabeceras .h que su ruta debe ser especificada explícitamente
al compilador.

Los comandos de programación:


load: $(FILE).hex
uisp -dlpt=/dev/parport0 –erase -dprog=$(CABLE)
uisp -dlpt=/dev/parport0 –upload if=$< -dprog=$(CABLE) -v=3 –hash=32

Al final se le indica que debe hacer para limpiar:

clean:
-rm -f $(FILE).hex
-rm -f $(FILE).map
-rm -f $(FILE).o
-rm -f $(FILE).listing

De esta forma solo se debe modificar la cabecera del Makefile para
una gran cantidad de proyectos y los cambios adicionales
se restringen a los proyectos que lo necesiten.

Los micro ATMEGA en general vienen con un reloj interno de ~1Mhz así
para esta aplicación de ejemplo no hace falta más que polarizar
el micro, programador, y un led.

Si se quiere utilizar un reloj diferente es importante leer
sobre los FUSES de estos micros y la documentación
del programador(uisp) sobre como realizar la configuración.

ledtest.c

#include <avr/io.h>
void delay_ms(unsigned short ms)
{
unsigned short dl1, dl2;
dl1 = 50; // Si se utiliza un reloj más veloz, incrementar este valor
while (dl1) {
dl2 = 1000;
while (dl2) {
while ( ms ) ms–;
dl2–;
}
dl1–;
}
}
int main(void)
{
DDRB|=_BV(PB2); // Habilita el Puerto B2 como salida
while (1) {

PORTB^=_BV(PB2); // TOOGLE del LED
delay_ms(500);
}
}

En mi caso se cambia en el makefile:


#Cambiar al nombre del proyecto
FILE=ledtest
#Especificar el micro para el cual se va a compilar
MCU=atmega8535

Es importante recordar que …/avr-elf/bin se debe encontrar en el PATH.


$export PATH=$PATH:…/avr-elf/bin
$setenv PATH $PATH:…/avr-elf/bin

El directorio del proyecto se debe ver algo así ahora:


4.0K Makefile
4.0K avrledtest.c

Compilamos

$make

Es posible que se presente el error de los 8 espacios, reemplace en el
Makefile esos 8 espacios por una tabulación.

Luego el directorio se debe ver:


4.0K Makefile 8.0K ledtest.listing
4.0K ledtest.c 8.0K ledtest.map
4.0K ledtest.hex

Si se quiere programar en el micro el ejemplo

$make load

Los archivos .listing y .map son muy útiles para analizar
el código final generado en assembler por el compilador, aunque
no son necesarios los añadí en el makefile para disponer
de todas las herramientas cuando se necesiten.

Con esto terminan esta serie de envíos, no pretenden ser un reemplazo
a la documentación de cada una de las herramientas, pero si una
guia adecuada.

Omito el esquemático del circuito ya que es bastante simple.

Se resume en:

  1. Alimentar el micro
  2. Led+Resistencia en el puerto B2, 1 Prendido, 0 Apagado
  3. Programador en las lineas adecuadas
  4. Cristal, Opcional

EOT

OSS/FS 3:22 pm

Great, first release at sourceforge.

En la página del proyecto se encuentra el primer archivo publicado en el proyecto, es el
más simple de todos pero es bastante placentero hacer el anuncio.

En este release:

  • Get Random Line
  • Update Backgrounds
  • Roll
  • My Aterm

Disfruten!

EOT

OSS/FSJune 24, 2005 7:04 pm

Saludos, el proyecto en SourceForgue fue aprobado hoy.

La dirección del proyecto en SF:

YAUCP: Yet Another uController Project.

EOT

TutorialesJune 22, 2005 9:28 am

Sobre el simulavrxx si se utilizan las últimas binutils y el bfd que viene con ellas
este programa llama un segmento de una estructura :

src/avrdevice.cpp

Lineas 122,132
size=sec->_cooked_size;

_cooked_size ya no existe en esta versión de las binutils y supongo que posteriores.
Así que hasta ahora lo que hice fue modificar esta linea por lo que al parecer
es el reemplazo adecuado, según bfd.h

Lineas 122,132
size=sec->size;

Esto ya hizo que la compilación continuara, pero falta ver si realmente funciona :P

Aparentemente me hace falta instalar SWIG para terminar la compilación.

Err. NO VALE LA PENA COMPILAR EL SIMULAVRXX no tiene muchos micros soportados.
Hasta que el desarrollo no avance será mejor apegarse al simulavr-1.2.2

EOT

TutorialesJune 20, 2005 11:49 pm

Para compilar los sources de las herramientas AVR. Supongo que por lo menos ya se tiene habilidad suficiente para moverse en un shell, descomprimir e instalar los programas desde el código fuente.

En resumen para todos los sources los pasos son:

  1. $./configure [FLAGS]
  2. $make
  3. #make install

Notese que # indica que se suele hacer como root, aquí para estas herramientas no nos interesa tener privilegios pues no es necesario.

  1. export MYDIR=$HOME/cross/avr-elf/ <- Directorio instalación
  2. export PATH=$PATH:$MYDIR/bin <- Es importante, y si se tiene una versión anterior de las herramientas eliminarlas del PATH para evitar conflictos
  3. BinUtils
    FLAGS=–enable-install-libbfd –target=avr –prefix=$MYDIR –disable-nls
  4. gcc y gcc-g++
    se descomprimen en el mismo directorio,
    FLAGS= –target=avr –enable-languages=”c,c++” –prefix=$MYDIR –disable-nls
  5. AVRLibc

    $ export PREFIX=$MYDIR
    $ sh -x ./doconf
    $ ./domake
    $[#] ./domake install
  6. UISP
    FLAGS= –prefix=$MYDIR

Eso es todo, ya con ese segmento compilado e instalado es suficiente para empezar a trabajar para el GDB los flags de compilación son muy similares a los del GCC, y para el simulavr solo basta el prefix.

UPDATED: Tue Jun 21 09:45:13 COT 2005
UPDATED: Wed Jun 22 08:26:50 COT 2005

EOT

Tutoriales 2:42 pm

Er… Parece que perdi los archivos del blog anterior, así que, tendre que

volver a escribir algunas partes importantes que existian en el blog anterior.

Parece que en este blog no puedo hacer organización temática de los contenidos y

como los post son usualmente extensos, la información no va a quedar tan disponible como quisiera.

Ahora retomemos las herramientas de los AVR.

Estas son:

  • gcc-3.3.4

    Se necesitan los fuentes, puede no ser el 3.3.4 pero es con la que he estado trabajando

  • avr-libc-1.0.4

    Los fuentes, creo que entre más nueva la versión mejor se porta

  • UISP

    Para este definitivamente es mejor obtener la última versión

  • GDB

    Versión adecuada para la versión de GCC, aún no recuerdo si se pueden utilizar las últimas versiones con independencia del compilador.

  • binutils-2.5.0

    Versión recomendada

  • SimulAVR

    Utilizar la versión más reciente, incluso CVS

Esos son todos, para gcc si se quiere utilizar el soporte limitado para c++, es necesario

tambien el gcc-g++, para la versión de gcc que se descargo.

Todas las versiones estan algo desactualizadas, las que son especificas de AVR es conveniente,

utilizar las versiones CVS.

Para gcc,gdb, y binutils es importante asegurarse que el desarrollo del crosscompiler este ya listo para las versiones, gcc 4.x tiene caracteristicas muy atractivas pero no conozco aún el

estado del crosscompiler para avr y conozco reportes de problemas de compatibilidad con código

de versiones anteriores en los objetivos tradicionales así que aun no es recomendado para quienes

desean comenzar.

El orden de compilación es el siguiente:

  1. BINUTILS
  2. GCC y G++
  3. AVRLibc
  4. GDB
  5. SimulAVR
  6. UISP
  7. DDD

    Excelente front end para el GDB

Los flags de configuración e instrucciones de instalación quedan por ahora para un

envio posterior, o de tarea :P

UPDATED: Tue Jun 21 09:46:24 COT 2005

EOT