Autor Tema: declarar tabla con codigo relocalizable (relocatable code)  (Leído 3932 veces)

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

Desconectado black_flowers

  • PIC18
  • ****
  • Mensajes: 450
declarar tabla con codigo relocalizable (relocatable code)
« en: 11 de Abril de 2007, 19:01:03 »
hola cómo se puede implementar esta tabla:

tabla       addwf pc , 1
                 retlw   0 
                 retlw   1
                 retlw   2


en este codigo?

#include "p16f84a.inc"

bank0   udata
   W_save      res   1
   Status_save   res   1   
   PCLATH_save   res   1
   FSR_save   res   1
   contador    res 1
   segundos    res 1
   entradas_actuales res 1
   entradas_anteriores res 1
   PDel0 res 1
   PDel1 res 1
   minutos     res 1

STARTUP   code
   pagesel   main
   goto   main
   nop

InterruptServiceVector
   bcf INTCON,GIE     ;enmascarar int general
   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   ; Timer 0
   call timer0         ;llamar rutina del t0 (recargar y borrar flag)
   
EndISR
   clrf   STATUS      ; select bank 0
   movf   FSR_save,w   ; restore the FSR
   movwf   FSR
   movf   PCLATH_save,w   ; restore PCLATH
   movwf   PCLATH
   movf   Status_save,w   ; restore Status
   movwf   STATUS
   swapf   W_save,f   ; restore W without corrupting STATUS
   swapf   W_save,w
   bsf INTCON,GIE      ; habilitar int general   
   retfie
   
code

main   

banksel PORTA
clrf   PORTA
banksel PORTB   
clrf    PORTB
...


como podeis ver es codigo objeto y no tiene la directiva org o sea que tiene que haber otra forma de declarar la tabla dentro de un banko,

que opinais? un saludo
« Última modificación: 13 de Abril de 2007, 18:08:53 por black_flowers »

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: declarar tabla con codigo objeto
« Respuesta #1 en: 11 de Abril de 2007, 19:53:07 »
como podeis ver es codigo objeto y no tiene la directiva org o sea que tiene que haber otra forma de declarar la tabla dentro de un banko,

que opinais? un saludo


Opino que no se trata de código objeto.  El código objeto se un archivo .o que no entenderías tu, sino más bien el linker.

Esto es código escrito en formato "relocatable" o "reubicable"...

- 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: declarar tabla con codigo objeto
« Respuesta #2 en: 12 de Abril de 2007, 17:44:59 »
ok, sí es eso, de todas formas lo que quería saber es cómo declarar una tabla en este tipo de codigo ya que para declarar variables se utiliza res, se utiliza res tambien para tablas o hay otra directiva?

sl2.   :-)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: declarar tabla con codigo objeto
« Respuesta #3 en: 13 de Abril de 2007, 08:47:45 »
ok, sí es eso, de todas formas lo que quería saber es cómo declarar una tabla en este tipo de codigo ya que para declarar variables se utiliza res, se utiliza res tambien para tablas o hay otra directiva?

sl2.   :-)

Es que no te alcanzo a entender.

¿Te referis a una tabla en RAM o en Memoria de Programa?
- 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: declarar tabla con codigo objeto
« Respuesta #4 en: 13 de Abril de 2007, 18:07:55 »
a ver en otras palabras, estaría bien declarada la tabla de esta manera?: (ah por cierto se trata de una tabla con valores constantes, no de variables).


#include "p16f84a.inc"

bank0   udata
   W_save      res   1
   Status_save   res   1   
   PCLATH_save   res   1
   FSR_save   res   1
   contador    res 1
   segundos    res 1
   entradas_actuales res 1
   entradas_anteriores res 1
   PDel0 res 1
   PDel1 res 1
   minutos     res 1

tabla       addwf pc , 1
                 retlw   0
                 retlw   1
                 retlw   2



STARTUP   code
   pagesel   main
   goto   main
   nop
....


sl2  :-)
« Última modificación: 13 de Abril de 2007, 18:11:27 por black_flowers »

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: declarar tabla con codigo objeto
« Respuesta #5 en: 14 de Abril de 2007, 11:40:30 »
Esa 'tabla' debe ir en una sección de código ya que esas constantes serán leídas cuando se llame a una operación de lectura de la tabla.

Debes poner algo así como


page0   code
tabla       addwf pc , 1
            retlw   0
            retlw   1
            retlw   2


Donde page0 debe ser una seccion definida en el linker file.

Saludos
- 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: declarar tabla con codigo relocalizable (relocatable code)
« Respuesta #6 en: 15 de Abril de 2007, 16:45:10 »
he declarado así la tabla (compila ok)¿está bien?

#include "p16f84a.inc"

bank0   udata
   W_save      res   1
   Status_save   res   1   
   PCLATH_save   res   1
   FSR_save   res   1
   contador    res 1
   segundos    res 1
   entradas_actuales res 1
   entradas_anteriores res 1
   PDel0 res 1
   PDel1 res 1
   minutos     res 1

STARTUP   code
   pagesel   main
   goto   main
   nop



pagina
tabla       addwf PCL , 1
            retlw   0
            retlw   1
            retlw   2


InterruptServiceVector
   bcf INTCON,GIE     ;enmascarar int general
   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   ; Timer 0
   call timer0         ;llamar rutina del t0 (recargar y borrar flag)
   
EndISR
   clrf   STATUS      ; select bank 0
   movf   FSR_save,w   ; restore the FSR
   movwf   FSR
   movf   PCLATH_save,w   ; restore PCLATH
   movwf   PCLATH
   movf   Status_save,w   ; restore Status
   movwf   STATUS
   swapf   W_save,f   ; restore W without corrupting STATUS
   swapf   W_save,w
   bsf INTCON,GIE      ; habilitar int general   
   retfie
   
code


lo que no sé es en qué sitio del linkerscript debo declarar "pagina" si como un CODEPAGE o como SECTION. En el primer caso debo especificar la longitud y en el segundo una variable "ROM=?"

me echais una mano?? gracias!! este es el código del linkerscript


// Sample linker command file for 16F84A
// $Id: 16f84a.lkr,v 1.4 2002/01/29 22:10:01 sealep Exp $

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
SECTION    NAME=Tabla  ROM=vectors    // Reset and interrupt vectors

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: declarar tabla con codigo relocalizable (relocatable code)
« Respuesta #7 en: 17 de Abril de 2007, 12:51:21 »
El código está bien pero ten cuidado que has ubicado la tabla en el principio del codigo!! ya que la ubicaste en la sección vectors que comienza en 0x00 hasta 0x28.  Si usas interrupciones, ten mucho cuidado .

Las secciones te sirven como parámetro previo a poner CODE.  Entonces siempre debes declarar un codepage que abarque la porción de memoria que quieres usar  y luego la Sección que da un nombre de variable , por así decirlo, que es el que usarás en el código.

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