Autor: Fernando Rafael Filipuzzi
E-mail: fernando_6867@yahoo.com.ar
Inicialmente se puede crear un proyecto en una carpeta y luego ubicar dentro de esta los fuentes, script, etc; una vez completado lo construimos usando las herramientas de desarrollo GNU para HCS12 y cuando lo tenemos compilado corremos el ejecutable con el debugger usando directamente gdb o utilizando un frontend como ddd.
Generalmente los fabricantes de microcontroladores ofrecen sus herramientas propietarias, para el caso de los hcs12 Freescale tiene un IDE propietario llamado CodeWarrior HCS12, otros IDEs se basan en Eclipse donde son también propietarios; ahora es posible integrar Eclipse con herramientas de desarrollo GNU para dispositivos embedded (toolchain) para formar un ambiente de desarrollo integrado (IDE) para plataformas cruzadas, aunque puede ser un poco mas complicado e insumir tiempo es más económico, libre, no estamos sujetos a las limitaciones que nos imponen las herramientas propietarias y por último no dependemos del sistema operativo que trabaje el IDE propietario, que casi siempre son para Windows. Integrar estas herramientas en un IDE es económico aunque no se tienen costos en las licencias pero si se requiere recursos como tiempo y conocimiento, cosa que se simplifica mucho por ser libres ya que es más fácil encontrar información sobre el tema.
Eclipse es una plataforma de desarrollo, está escrito en java, inicialmente apuntaba a desarrolladores java y por medio de un plugins se le puede sumar caracteristicas para desarrollar en otros lenguajes. CDT (C++ Development Tools) provee el soporte para desarrollar en C/C++, este plugins para C/C++ nos sirve junto con el GNU toolchain para los HCS12 crear y debuggear los proyectos para estos microcontroladores.
La instalación del GNU Toolchain HCS12 se puede ver en este enlace local al igual que las referencias tanto al sitio original como a otros.
host:# apt-get install ddd
La instalación de Eclipse se puede hacer por medio de los repositorios de la distro que utilicemos o bajando directamete de la página principal de este un tarball.
En el sitio oficial se puede elegir la versión que trae instalado el CDT, una vez bajado, descomprimido y antes de ejecutarlo debemos resolver las dependencias para poder correr el ejecutable instalando lo siguiente:
host:# apt-get install java-common host:# mkdir jdk host:# cd jdkahora bajamos el jdk del sitio oficial, es un tarball que descomprimimos dentro de la carpeta jdk; un vez completado lo anterior continuamos con:
host:# http://linorg.usp.br/eclipse/technology/epp/downloads/release/helios/SR2/eclipse-cpp-helios-SR2-linux-gtk.tar.gz host:# tar xvf eclipse-cpp-helios-SR2-linux-gtk.tar.gz host:# rm eclipse-cpp-helios-SR2-linux-gtk.tar.gz host:# mv eclipse eclipse_hcs12
Para poder correr el ejecutable hay que tener en la variable de entorno llamada $PATH el camino o ruta al jdk instalado, suele suceder que hay alguna instalación previa del jdk o jre para lo cual ya estaría fijada estas variables con algunos de estos, dependiendo de que tenemos instalado nos podria dar algunos errores al ejecutar eclipse por que se ejecutaria en algun jdk que no es el que fijamos. Para resolver esto hay dos formas:
"/etc/profile"
:
export JAVA_HOME=/home/fernando/bin/jdk1.6.0_16 export PATH=$JAVA_HOME/bin:${PATH}esto se coloca al final de este fichero "profile". La cadena
"$JAVA_HOME/bin"
es importante que vaya al principio, antes que ${PATH}, para que cuando se requiera se tome el primer jdk del PATH.
export GDK_NATIVE_WINDOWS=1 export PathDeEclipse="/donde_este_escomprimido_el_tarball/eclipse" export JDK="/donde_tengamos_este_instalado_el_jdk/bin/java" "$PathDeEclipse""/./eclipse" -vm "$JDK"luego hay que darles permisos de ejecución al script, para el caso de que le pongamos de nombre al fichero del script
"eclipse_hcs12.sh"
los permisos se dan con:
host:# chmog ugo=rwx eclipse_hcs12.shEn GNOME se podria añadir en el panel superior un "lanzador de aplicaciones personalizado" que ejecute nuestro script con click derecho sobre
"el panel seleccionado">"Añadir al panel">"lanzador de aplicaciones personalizado"; luego presionando el boton añadir completamos un formulario con:
Tipo: Aplicación Nombre: Eclipse Comando: /donde_este_escomprimido_el_tarball/eclipse/eclipse_hcs12.sh
Cuando inicializa Eclipse nos pide el camino o path del directorio workspace o espacio de trabajo donde se van a guardar los proyectos con la configuración general del IDE, al ejecutarse por primera vez con un workspace nuevo este inicia con la configuración por defecto.
Luego configuramos en el workspace en preferencias
:
Hay varias formas:
Para empezar, se selecciona desde el menú principal de Eclipse "File>New>Other"
, luego muestra un wizard con una lista de opciones, eligiendo "C/C++>Makefile Project with Existing Code"
le sigue un formulario como el de la siguiente figura:
dejando el formulario como se muestra en esa figura de ahi arriba y haciendo "Finish" tenemos importado el proyecto:
El gdb utilizado es parte del toolchain para los HCS12
Un comienzo con el debugger por ejemplo sería:
host:# m6811-elf-gdb GNU gdb 6.2-m68hc1x-2004-08-01 Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "--host=i686-pc-linux-gnu --target=m6811-elf"...target=sim: No existe el fichero o el directorio. (gdb)con
(gdb)
nos indica el promp para entrar comandos, ingresando por ejemplo help target
(gdb) help target Connect to a target machine or process. The first argument is the type or protocol of the target machine. Remaining arguments are interpreted by the target protocol. For more information on the arguments for a particular protocol, type `help target ' followed by the protocol name. List of target subcommands: target async -- Use a remote computer via a serial line target bdm12 -- Debug using Kevin Ross' BDM12 Pod target buffalo -- Debug via the Buffalo 68HC11 monitor target dbug -- Debug via the DBug 68HC12 monitor target exec -- Use an executable file as a target target extended-async -- Use a remote computer via a serial line target extended-remote -- Use a remote computer via a serial line target remote -- Use a remote computer via a serial line target sim -- Use the compiled-in simulator Type "help target" followed by target subcommand name for full documentation. Command name abbreviations are allowed if unambiguous.nos listó los target o interfaces soportados por m6811-elf-gdb. También se puede entrar el comando
help
, este muestra las clases de comandos, uno de esa lista es data
y al igual que en el caso anterior pero ahora con help data
nos tira todo los comandos de esa clase.
(gdb) help List of classes of commands: aliases -- Aliases of other commands breakpoints -- Making program stop at certain points data -- Examining data files -- Specifying and examining files internals -- Maintenance commands obscure -- Obscure features running -- Running the program stack -- Examining the stack status -- Status inquiries support -- Support facilities tracepoints -- Tracing of program execution without stopping the program user-defined -- User-defined commands Type "help" followed by a class name for a list of commands in that class. Type "help" followed by command name for full documentation. Command name abbreviations are allowed if unambiguous. (gdb) help data Examining data. List of commands: append -- Append target code/data to a local file call -- Call a function in the program delete display -- Cancel some expressions to be displayed when program stops delete mem -- Delete memory region disable display -- Disable some expressions to be displayed when program stops disable mem -- Disable memory region disassemble -- Disassemble a specified section of memory display -- Print value of expression EXP each time the program stops dump -- Dump target code/data to a local file enable display -- Enable some expressions to be displayed when program stops enable mem -- Enable memory region inspect -- Same as "print" command mem -- Define attributes for memory region output -- Like "print" but don't put in value history and don't print newline print -- Print value of expression EXP print-object -- Ask an Objective-C object to print itself printf -- Printf "printf format string" ptype -- Print definition of type TYPE regs -- Print all registers restore -- Restore the contents of FILE to target memory set -- Evaluate expression EXP and assign result to variable VAR set variable -- Evaluate expression EXP and assign result to variable VAR undisplay -- Cancel some expressions to be displayed when program stops whatis -- Print data type of expression EXP ---Typeto continue, or q to quit--- x -- Examine memory: x/FMT ADDRESS Type "help" followed by command name for full documentation. Command name abbreviations are allowed if unambiguous (gdb)
Debuggear un ejecutable requiere previamente que esté compilado con la opción -g
, ahora en el debugger se deben ingresar los siguientes comandos:
(gdb) file main.elf Reading symbols from /home/fernando/workspaces/workspace_hcs12_B/secuencial/main.elf...done. (gdb) target sim Connected to the simulator. (gdb) load main.elf Loading section .text, size 0xee lma 0x4000 Loading section .vectors, size 0x80 lma 0xff80 Start address 0x4000 Transfer rate: 2928 bits in <1 sec. (gdb) break main Breakpoint 1 at 0x404b: file main.c, line 3 (gdb) run Starting program: /home/fernando/workspaces/workspace_hcs12_B/secuencial/main.elf Breakpoint 1, main () at main.c:31 31 DDRB.byte = 0xff;Estos primeros comandos se pueden colocar en un fichero con el nombre
.gdbinit
en la raiz del proyecto para que cuando cada vez que corramos el proyecto con gdb ejecute esos comandos. Para continuar con el debuggeo hay varios comandos:
(gdb) n 34 PORTB.byte = 0xff;
(gdb) n 36 for(i =0;i<3000;i++) (gdb) n 37 for(j=0;j<3000;j++); (gdb) print i $1 = 0 (gdb)
(gdb) b main
(gdb) q
--debugger
y el nombre del debugger del que se va a usar:
host:# ddd --debugger "m6811-elf-gdb"luego se veria: en la figura se ve que que la hay dos areas, la superior llamada
Source window
, que está en blanco y la inferior que tiene:
GNU DDD 3.3.12 (i486-pc-linux-gnu), by Dorothea Lütkehaus and Andreas Zeller. Copyright © 1995-1999 Technische Universität Braunschweig, Germany. Copyright © 1999-2001 Universität Passau, Germany. Copyright © 2001 Universität des Saarlandes, Germany. Copyright © 2001-2004 Free Software Foundation, Inc. (gdb)llamada
GDB Console
donde como lo sugiere el nombre se ingresan los comandos gdb, así resulta lo siguiente:
GNU DDD 3.3.12 (i486-pc-linux-gnu), by Dorothea Lütkehaus and Andreas Zeller. Copyright © 1995-1999 Technische Universität Braunschweig, Germany. Copyright © 1999-2001 Universität Passau, Germany. Copyright © 2001 Universität des Saarlandes, Germany. Copyright © 2001-2004 Free Software Foundation, Inc. (gdb) file main.elf (gdb) target sim Connected to the simulator. (gdb) load main.elf Loading section .text, size 0xee lma 0x4000 Loading section .vectors, size 0x80 lma 0xff80 Start address 0x4000 Transfer rate: 2928 bits in <1 sec. (gdb) break main Breakpoint 1 at 0x404b: file main.c, line 31. (gdb) run Breakpoint 1, main () at main.c:31 (gdb)esto último se puede hacer si tenemos estos comandos en el fichero
.gdbinit
para que corran cada vez que ejecutemos el ddd.
Proyect>Build All
para debuggear desde Eclipse primero hay que ir a Project>Debug Configurations...
para configurar el debugger
Aquí no necesariamente el fichero se debe llamar .gdbinit
, puede ser otro nombre como solamante gdbinit
.
No symbol table is loaded. Use the "file" command.
No symbol "auto" in current context.