Autor Tema: cómo crear una tabla en codigo relocatable?  (Leído 2987 veces)

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

Desconectado black_flowers

  • PIC18
  • ****
  • Mensajes: 450
cómo crear una tabla en codigo relocatable?
« en: 28 de Mayo de 2007, 16:48:42 »
pues nada, llevo tiempo intentando crear una tabla en rom (usease de valores fijos) en codigo RELOCATABLE pero no lo he conseguido. ¿alguien me puede ayudar? Este es el codigo, como podeis observar no pongo nada en el main lo unico que me interesa es implementar la tabla:

y lo que quiero crear es una tabla con tres valores (0,1,2)


#include "p16f84a.inc"

bank0   udata
   W_save      res   1
   Status_save   res   1   
   PCLATH_save   res   1
   FSR_save   res   1

STARTUP   code
   pagesel   main
   goto   main
   nop

tabla       addwf PCL , 1   (no se si de esta forma está bien declarada me imagino que sí, de lo que no tengo ni idea es de
            retlw   0                cómo hay que modificar el linkerscript)
            retlw   1
            retlw   2


InterruptServiceVector
   bcf INTCON,GIE 
   banksel W_save
   movwf   W_save   
   movf   STATUS,W
   clrf   STATUS      
   movwf   Status_save   
   movf   PCLATH,w
   movwf   PCLATH_save   
   movf   FSR,w
   movwf   FSR_save

Process_ISR


   clrwdt
   btfsc   INTCON,T0IF   
   call timer0         
   
EndISR
   clrf   STATUS      
   movf   FSR_save,w   
   movwf   FSR
   movf   PCLATH_save,w
   movwf   PCLATH
   movf   Status_save,w   
   movwf   STATUS
   swapf   W_save,f   
   swapf   W_save,w
   bsf INTCON,GIE      
   retfie
   
code


main   
loop
goto loop
end


este es el linkerscript:

LIBPATH  .

CODEPAGE   NAME=vectors  START=0x0      END=0x28      PROTECTED
CODEPAGE   NAME=page     START=0x29      END=0x3FF
CODEPAGE   NAME=.idlocs  START=0x2000   END=0x2003   PROTECTED
CODEPAGE   NAME=.config  START=0x2007   END=0x2007   PROTECTED
CODEPAGE   NAME=eedata   START=0x2100   END=0x213F   PROTECTED

DATABANK   NAME=sfr0     START=0x0      END=0xB      PROTECTED
DATABANK   NAME=sfr1     START=0x80     END=0x8B     PROTECTED

DATABANK   NAME=gprs     START=0xC      END=0x4F

SECTION    NAME=STARTUP  ROM=vectors    // Reset and interrupt vectors
SECTION    NAME=PROG     ROM=page       // ROM code space
SECTION    NAME=IDLOCS   ROM=.idlocs    // ID locations
SECTION    NAME=CONFIG   ROM=.config    // Configuration bits location
SECTION    NAME=DEEPROM  ROM=eedata     // Data EEPROM


alguien podría decirme cómo hay que modificar este archivo? nO es que no quiera pasar el trabajo de hacerlo, que va, llevo mucho tiempo intentandolo sin lograr nada, incluso he mirado en los foros de microchip y en los datasheet pero... ooops! están en inglés, y la verdad no he sacado nada en limpio. Pues eso aver si alguien sabe cómo se hace y me hecha una mano, me imagino que a más de uno le será útil.

Personalmente estoy interesado en hacer todo en relocatable pues queda todo mucho más limpio y legible, así es que en el modo absoluto ya se cómo se hace pero me interesa saber cómo se hace en este modo


un saludo.   :-)
« Última modificación: 29 de Mayo de 2007, 20:21:34 por black_flowers »

Desconectado black_flowers

  • PIC18
  • ****
  • Mensajes: 450
Re: cómo crear una tabla en codigo relocatable?
« Respuesta #1 en: 30 de Mayo de 2007, 17:57:59 »
ayuda please. cualquier cosa, cualquier aportación será útil, a ver si poco a poco...

1 saludo.

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: cómo crear una tabla en codigo relocatable?
« Respuesta #2 en: 31 de Mayo de 2007, 01:40:03 »
jejeje en primer luhgar que significa tabla relocatable?
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: cómo crear una tabla en codigo relocatable?
« Respuesta #3 en: 31 de Mayo de 2007, 08:47:12 »
jejeje en primer luhgar que significa tabla relocatable?

sin decir que tu post no aporta mucho  :mrgreen: :mrgreen:, te comento que realidad lo dicho por black_flowers está mal expresado.  Debió decir "hacer una tabla codificando en modo relocatable o reubicable" en oposición a codificar en modo "fixed o fijo".

En modo relocatable uno escribe el código y le indica al linker en qué sección de la memoria estará ubicado el mismo.  De esa forma , si uno pone con cierto ingenio ciertos nombres, puede reubicar el código con muy pocos cambios.  Es algo que uso muchísimo para hacer mis códigos en assembler "portátiles" en toda la gama de los 16F. 

En los 18F ya no tiene tanto sentido porque precisamente no hay limites en los saltos de programa, pero igual puede ser necesario que uno quiera ubicar una sección de código en una sección especial y en este caso el código relocatable es algo muy poderoso.

En resumen, es trabajar con el assembler usando el linker file.  Sería algo así como "programación avanzada en assembler" pero eso es otro tema. je.


Ahora para black_flowers yo no veo ningún inconveniente en tu código y es perfectamente una tabla en modo relocatable.  Ahora bien, si lo que quieres es ubicarla a partir de una posición "especial" del programa, sería bueno que aclares porque eso no queda implícito en el ejemplo que has subido.

- 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)

Desconectado black_flowers

  • PIC18
  • ****
  • Mensajes: 450
Re: cómo crear una tabla en codigo relocatable?
« Respuesta #4 en: 31 de Mayo de 2007, 19:48:08 »
Ahora para black_flowers yo no veo ningún inconveniente en tu código y es perfectamente una tabla en modo relocatable.  Ahora bien, si lo que quieres es ubicarla a partir de una posición "especial" del programa, sería bueno que aclares porque eso no queda implícito en el ejemplo que has subido.

No quiero ubicarla en ninguna posición especial. Me dá igual la posición. Teniendo esto en cuenta ¿habría que modificar el linker script? (bueno me dá la sensación por lo que pones en tu respuesta, que el lkr sólo es necesario modificarlo cuando quieres situar la tabla en una posición en concreto no?)

un saludo, y muchas gracias x vuestra ayuda!   :-)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: cómo crear una tabla en codigo relocatable?
« Respuesta #5 en: 01 de Junio de 2007, 13:26:17 »
No quiero ubicarla en ninguna posición especial. Me dá igual la posición.
Entonces, no toques nada que así está ok.

Teniendo esto en cuenta ¿habría que modificar el linker script? (bueno me dá la sensación por lo que pones en tu respuesta, que el lkr sólo es necesario modificarlo cuando quieres situar la tabla en una posición en concreto no?)

Exacto.
- 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)