TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: black_flowers 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. :-)
-
ayuda please. cualquier cosa, cualquier aportación será útil, a ver si poco a poco...
1 saludo.
-
jejeje en primer luhgar que significa tabla relocatable?
-
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.
-
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! :-)
-
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.