SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: bitelmaniaco en Lunes 27 de Abril de 2009, 14:03
-
Buenas, estoy realizando un proyecto para manejar una placa que lleva un chip AMR9 y con un núcleo linux (no sé si se dice así).
Lo que estoy haciendo es programar en lenguaje ANSI C en Ubuntu, utilizando Eclipse, paso lo que he programado a la placa mediante el Filezilla (ya que está conectado mediante ethernet) y luego lo trato de depurar mediante gdbserver.
De momento me está dando un problema de depuración al añadirle breakpoints (mi programa de momento solo tiene tres "hello worlds" y le pongo un punto de parada en el segundo), ya que me da error justo en la línea en el que le pongo el breakpoint.
¿Alguien puede ayudarme? :argh:
Muchas gracias.
-
No se, proba poniendo el breakpoint en la primera linea y siguiendolo en assembly ...
-
No se, proba poniendo el breakpoint en la primera linea y siguiendolo en assembly ...
¿En assembly? ¿Te refieres a ensamblador? No llego a tanto...
-
Si. ¿El primer printf funciona correctamente? ¿Podes poner el breakpoint ahi?
-
Si. ¿El primer printf funciona correctamente? ¿Podes poner el breakpoint ahi?
Tampoco funciona. Lo que pasa es que yo de ensamblador nada...
gracias
-
¿Qué error te da?
-
cannot access memory at address 0x1
y no me hace más...
-
¿Cómo tienes el asunto conectado, a nivel hardware me refiero?
-
¿Cómo tienes el asunto conectado, a nivel hardware me refiero?
Lo tengo conectado por ethernet, a un switch para hacerlo remotamente, y también conectado a otro ordenador con Windows y con el Hyperterminal veo los mensajes que sale por pantalla...
-
¿Y la memoria a la CPU, seguro que la tienes bien conectada? Yo creo que tu problema es a nivel de conexiones físicas, no de software.
-
¿Y la memoria a la CPU, seguro que la tienes bien conectada? Yo creo que tu problema es a nivel de conexiones físicas, no de software.
¿Es por eso? Es que lo que utilizo es un pack, todo el chip este y tal esta metido en una caja que no he abierto ni nada... :ouch:
-
todo el chip este y tal esta metido en una caja que no he abierto ni nada...
Ah bueno, no sabía. Aunque igualmente es posible que sea.
Entonces la caja tiene un puerto Ethernet, y el cable de ese puerto va a un switch, al que está conectado otro cable que va al PC con Windows. ¿Es así?
¿Cómo accedes a la memoria del ARM?
-
pues de momento no he hecho nada con punteros, si te refieres a eso... simplemente trato de hacer un "hola mundo".
si te refieres a lo que tiene cargado en la memoria cuando arranca (las carpetas que el linux me carga al encenderse) lo hago con el filezilla
-
Si estas pasando el programa compilado al ARM, lo que necesitas es usar un toolchain (http://en.wikipedia.org/wiki/Toolchain) ya que, por cuestiones de arquitectura, el binario no ejecuta.
Asegurate que si lo esta compilando para la arquitectura que es (ejecuta file mi_ejecutable en una terminal).
-
Si estas pasando el programa compilado al ARM, lo que necesitas es usar un toolchain ya que, por cuestiones de arquitectura, el binario no ejecuta.
Asegurate que si lo esta compilando para la arquitectura que es (ejecuta file mi_ejecutable en una terminal).
joe gracias por las respuestas.
Pues mira, lo del toolchain fue de lo primero que hice, cuando ejecuto el programa en el terminal no me deja porque me dice no sé que de binario, que creo que es a lo que te refieres... ¿no?
Pero es que algo se me escapa con lo del gdbserver...
-
¿Seguro que compilas bien? ¿Usas las opciones adecuadas para ARM para gcc (http://www.google.es/search?hl=es&client=firefox-a&channel=s&rls=org.mozilla%3Aes-ES%3Aofficial&hs=cFi&q=gcc+compiling+arm&btnG=Buscar&meta=)? ¿Usas libc para ARM? Te dejo un enlace por si las moscas: http://www.mobilab.unina.it/Resources/c ... HOWTO.html (http://www.mobilab.unina.it/Resources/crosscompilerHOWTO.html" onclick="window.open(this.href);return false;)
-
Sí, está todo bastante machacaito ya, llevo como dos semanas con ello. Sinceramente, ¿nadie ha hecho lo que estoy haciendo? Si no lo puedo probar con otra IDE...
-
Si no lo puedo probar con otra IDE...
¿Qué tendrá que ver? El final usarás gcc para generar el código.
¿Estás seguro de que el Filezilla escribe en la memoria?
-
Sí, ya que cuando me conecto a la placa por el hyperterminal me aparece el archivo compilado que he creado.
Digo lo del cambio de IDE por si es más fácil lo que quiero hacer respecto al gdb.
-
Recapitulando, a ver si no me pierdo: tienes una placa con ARM y sus memoria principal. Aparte tienes también en la placa una memoria secundaria. En ésta hay un Linux que se ejecuta cuando enciendes la placa. Para acceder a la memoria secundaria de la placa ARM usas Filezilla. ¿Cómo le mandas ejecutar el fichero?
-
Siento no haberme explicado bien, pero agradezco tu dedicación. Mira, tengo la placa conectada a un ordenador por un puerto de serie (el ordenador un COM y la placa un puerto de ethernet, eso yo no lo he hecho) y luego tiene una salida a la red privada con otro puerto ethernet, la placa tiene IP propia.
Con todo esto, gracias a la conexión con el ordenador (que tiene windows) uso el hyperterminal para conectarme. Una vez cargado se inicia linux (por supuesto en modo comandos) y simplemente busco el progama que le he pasado con anterioridad por el Filezilla y lo ejecuto ahí, en el hyperterminal (como si fuera una terminal de linux) y me funciona bien, incluso cuando quiero hacer algo más "avanzado" que un "hola mundo".
Espero explicarme. Para más detalles, el conjunto de la placa es una Matrix 520 de Artila.
-
Ah bueno, podrías haber empezado con esto desde el primer post, ¿no te parece? <_< :wacko:
Entonces la cuestión es que gdb no te funciona. ¿Qué te dice al hacer gdb -q tu_programa?
-
me pone:
(no debugging symbols found)
¿Eso qué significa? ¿A qué se refiere con los símbolos esos que no encuentra?
-
Eso es porque no has compilado con soporte para depuración :P Debes compilar con la opción -g de gcc.
-
Eso es porque no has compilado con soporte para depuración :P Debes compilar con la opción -g de gcc.
upss, pues eso solo se debe a mi falta de conocimiento... :alien:
entonces, si yo a pelo en terminal suelo compilar así:
arm-linux-gcc programa.c -o programaEjecutable.o
¿Ahora sería así?
arm-linux-gcc -g programa.c -o programaEjecutable.o
Entonces el Makefile seria algo así supongo:
CC = arm-linux-gcc
#CC = gcc
all: ejecutable
ejecutable: programa.c
$(CC) -ggdb -o ejecutable.o programa.c
arm-linux-strip ejecutable.o
clean:
rm -f ejecutable.o
Espero estar bien... Vamos ir por el buen camino...
Gracias.
-
¿Ahora sería así?
arm-linux-gcc -g programa.c -o programaEjecutable.o
Eso es, aunque la .o se suele usar para código objeto (sin enlazar), no para ejecutables.
Entonces el Makefile seria algo así supongo:
Sip, parece estar bien.