Autor Tema: Código reubicable  (Leído 3612 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Jordi

  • PIC10
  • *
  • Mensajes: 10
Código reubicable
« en: 14 de Febrero de 2008, 15:41:03 »
¡Hola!,

me estoy iniciando con el código reubicable por las ventajas que presenta. Bueno pues estas son mis primeras pruebas y fallidas  :(. El código de retardos lo encontré por el foro y me pareció bueno para hacer las pruebas por su sencillez.

Bueno lo que pasa es que si añado el código de retardos el programa no me encuentra el punto de entrada, y si no lo pongo pues me entra en el main perfectamente. La cuestión es que no puede haber código por encima del programa principal no se porqué. Si lo intento poner debajo el compilador no sabe resolver los símbolos.

El simulador me da error CORE-E0002: Stack under flow error occurred from instruction at 0x000800


Gracias por adelantado

Adjunto programa y el map file


LIST P=16F873A

#include "P16F873A.INC"
#include "c_Externo.inc"


EXTERN Retardo_10micros,Retardo_5micros,Retardo_4micros


udata

   dato   res      1


reset   CODE    0

   pagesel    main
   goto       main


principal    CODE   0x05


        pagesel Retardo_10micros
   call    Retardo_10micros
   goto    $

END


Aqui viene c_Externo.inc


GLOBAL Retardo_10micros,Retardo_5micros,Retardo_4micros


retardos CODE


Retardo_10micros      ; La llamada "call" aporta 2 ciclos máquina.
   nop            ; Aporta 1 ciclo máquina.
   nop            ; Aporta 1 ciclo máquina.
   nop            ; Aporta 1 ciclo máquina.
   nop            ; Aporta 1 ciclo máquina.
   nop            ; Aporta 1 ciclo máquina.
Retardo_5micros         ; La llamada "call" aporta 2 ciclos máquina.
   nop            ; Aporta 1 ciclo máquina.
Retardo_4micros         ; La llamada "call" aporta 2 ciclos máquina.
   return            ; El salto del retorno aporta 2 ciclos máquina.

END

.map

MPLINK 4.11, Linker
Linker Map File - Created Thu Feb 14 18:35:13 2008

                                 Section Info
                  Section       Type    Address   Location Size(Bytes)
                ---------  ---------  ---------  ---------  ---------
                   .cinit    romdata   0x000005    program   0x000004
                 retardos       code   0x000007    program   0x00000e



                              Program Memory Usage
                               Start         End     
                           ---------   ---------     
                            0x000005    0x00000d     
            9 out of 4229 program addresses used, program memory utilization is 0%



                              Symbols - Sorted by Name
                     Name    Address   Location    Storage File                     
                ---------  ---------  ---------  --------- ---------               
         Retardo_10micros   0x000007    program     extern c_Externo.inc
          Retardo_4micros   0x00000d    program     extern c_Externo.inc
          Retardo_5micros   0x00000c    program     extern c_Externo.inc



                              Symbols - Sorted by Address
                     Name    Address   Location    Storage File                     
                ---------  ---------  ---------  --------- ---------               
         Retardo_10micros   0x000007    program     extern c_Externo.inc
          Retardo_5micros   0x00000c    program     extern c_Externo.inc
          Retardo_4micros   0x00000d    program     extern c_Externo.inc



Desconectado Jordi

  • PIC10
  • *
  • Mensajes: 10
Re: Código reubicable
« Respuesta #1 en: 15 de Febrero de 2008, 13:35:00 »
Pues bien, por lo visto hay que hacer un .asm y un .inc. En el .asm v¡ene todo el código definido en su correspondiente sección CODE y arriba de la sección un GLOBAL con todos los nombres de las funciones. Luego en el .inc viene un EXTERN con todos los nombres de las funciones declaradas en el GLOBAL. Se añade el .inc al programa principal y todo solucionado!


osea .asm

GLOBAL funcion1,funcion2

datos UDATA_SHR
dato1          res            1


codigo CODE

funcion1

nop
return

funcion2

nop
return

END

.inc

EXTERN  funcion1,funcion2


programa principal

reset CODE 0
goto main

PROG1 CODE

main
nop
nop
call funcion1
goto $

END



Espero que os sirva de algo

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Código reubicable
« Respuesta #2 en: 15 de Febrero de 2008, 16:50:33 »
el que conoce sobre ese tema es Maunix, se ha tratado varias veces en foro, para simplificar la busqueda, escribe la palabra clave: relotocable por el autor: Maunix



La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Jordi

  • PIC10
  • *
  • Mensajes: 10
Re: Código reubicable
« Respuesta #3 en: 15 de Febrero de 2008, 18:24:26 »
Gracias PalitroqueZ, aunque ya lo he solucionado me estoy mirando los post de Maunix que me dan bastante información. Por cierto por relotocable no encontré nada, es relocatable.

Un saludo,

Jordi

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Código reubicable
« Respuesta #4 en: 16 de Febrero de 2008, 16:57:36 »
Gracias PalitroqueZ, aunque ya lo he solucionado me estoy mirando los post de Maunix que me dan bastante información. Por cierto por relotocable no encontré nada, es relocatable.

Un saludo,

Jordi

gracias por la correccion, se ve que no conozco el tema  :8}

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Código reubicable
« Respuesta #5 en: 18 de Febrero de 2008, 12:43:25 »
Palitroquez gracias por tus palabras. :)

Jordi ya ando de nuevo por acá (estuve ausente unos días), según el mensaje que leo estas teniendo un 'underflow' del stack.

Eso solo es posible si hubo un "return" sin un previo "call". 

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything