No termino de entender exactamente el problema que tenías. En principio
parecería que algún salto posterior te hacia vuelve atrás, claro que
sin una muestra no hay forma de saber con certeza.
En cualquier caso la solución es incorrecta.
Suponiendo que lo que tenés ahí definido sea lo relativo al "código de
usuario", y el origen que estás definiendo es el de eso, y no del
firmware (aunque no sé que clase de diferenciación estás haciendo...),
la solución sería funcional, pero no por eso correcta.
El problema es que no queda nada claro eso, ni en este, ni en el
mensaje anterior. Supongo que, en parte, no hubo respuestas justamente
por eso.
De no ser el caso, y lo que estás definiendo es la dirección origen del
firmware, te funciona de casualidad, y no es lo que le querés decir
realmente al enlazador.
Antes que nada, hay que aclarar que el comando MEMORY indica la
disposición de la memoria del dispositivo, para que el enlazador tenga
una idea de dónde poner las cosas, no es algo a cambiar de acuerdo al
software, y debería ser lo mismo para ambas partes.
Una de las posibles soluciones correctas es enviar diferentes ficheros a
diferentes posiciones. E.g.:
SECTIONS {
firmware 0: firmware_*.o
usercode 0x8000: *
}
Esa supongo que sería la forma más sencilla, aunque también se puede
hacer en base al nombre de los símbolos, sección, etc.
La parte relativa a la memoria hay que dejarla como estaba
originalmente, pues sería la definición correcta.
Los detalles están sujetos a que haya interpretado correctamente la
descripción, claro está, pero el resto aplica de manera genérica.
Saludos.
> El 26 de noviembre de 2014, 8:36, carlos cabas
> <
ing.car...@gmail.com> escribió:
>
> > Hola a todos, estoy trabajando en un bootloader desde SD y he
> > logrado actualizar el firmware desde la SD pero tengo problema al
> > ejecutar el nuevo código, analizando la memoria flash del micro
> > logro ver que el firmware está presente. el código del bootloader
> > está programado en el sector 0x0000 y el código de usuario a partir
> > del sector 0x8000, el problema es, que cuando realizo el salto en
> > el contador de programa hacia la dirección 0x8000 la primera
> > instrucción (el inicio del main()) me envía al inicio nuevamente,
> > como si reiniciara el programa.
> >
> >
> > supongo que debe ser porque el programa que estoy booteando está
> > programado a partir de la memoria 0x0000 con lo cual es lógico que
> > me envíe al inicio nuevamente.
> >
> > mi pregunta es que instrucción uso para indicarle a mi programa
> > desde que posición de memoria quiero que inicie ? probé con la
> > instrucción assembler asm(".ORG 0x8000") y no logro hacer que
> > funcione.
> >
> > Estoy usando el IDE LPCxpresso y la placa LPCxpresso1769.
> >
> > Les agradezco su aporte y colaboración, de antemano Muchas Gracias.
> >
> > --
> > *Cordialmente;*
> >
> > *Carlos Cabas Meriño*
> > *Ingeniero Electrónico*
> > *Est. Posgrado Automatización Industrial (UBA)*
> >
> > *Técnico Profesional en Contabilidad y Finanzas*
> > *CCNA CISCO Certified.*
> >
>
>
>