Bueno, no queria responder hasta no encontrar el problema y una solucion.
Utiliza lo que hizo Miguel. Es decir la directiva
[label]
udata_shr [RAM_address]
El por que?
Ya que no seria lindo tirar instrucciones por tirar
Por que el PIC, al banco 0 se puede acceder desde el banco 3, por lo tanto no se puede definir como DATABANK ( o un registro con un banco definido) sino como SHAREBANK ( es decir UN registro que se puede acceder desde varios bancos).
Si los definiera con DATABANK seria incorrecto, ya que seria como si tuviera 2 registros independientes, cuando en realidad es que tengo 1 solo. O podria simplemente definir la seccion del banco 0 y quitar la parte del banco 3(no mapearlo), si es que quiero definirlo como DATABANK.
Mirando los archivos del linker:
PIC16F870:
DATABANK NAME=sfr0 START=0x0 END=0x1F PROTECTED
DATABANK NAME=sfr1 START=0x80 END=0x9F PROTECTED
DATABANK NAME=sfr2 START=0x100 END=0x10F PROTECTED
DATABANK NAME=sfr3 START=0x180 END=0x18F PROTECTED
SHAREBANK NAME=gpr0 START=0x20 END=0x6F
SHAREBANK NAME=gpr0 START=0x120 END=0x16F PROTECTED
SHAREBANK NAME=gprnobnk START=0x70 END=0x7F
SHAREBANK NAME=gprnobnk START=0xF0 END=0xFF PROTECTED
SHAREBANK NAME=gprnobnk START=0x170 END=0x17F PROTECTED
SHAREBANK NAME=gprnobnk START=0x1F0 END=0x1FF PROTECTED
SHAREBANK NAME=gpr1 START=0xA0 END=0xBF
SHAREBANK NAME=gpr1 START=0x1A0 END=0x1BF PROTECTED
Del codigo:
SHAREBANK NAME=gpr0 START=0x20 END=0x6F -------> Esto pertenece al banco 0
SHAREBANK NAME=gpr0 START=0x120 END=0x16F PROTECTED -------> Esto al banco 3
Pero si observas en el datasheet, accedes al mismo banco.
Las posiciones de 0x70 a 0x7F puede ser accedidas desde cualquier banco, por ese motivo estan definidas las direcciones de los 4 bancos
En cambio yo lo probaba con un PIC16F877, que lo define como DATABANK, ya que su acceso es unico, excepto de 0x70 a 0x7F:
DATABANK NAME=sfr0 START=0x0 END=0x1F PROTECTED
DATABANK NAME=sfr1 START=0x80 END=0x9F PROTECTED
DATABANK NAME=sfr2 START=0x100 END=0x10F PROTECTED
DATABANK NAME=sfr3 START=0x180 END=0x18F PROTECTED
DATABANK NAME=gpr0 START=0x20 END=0x6F
DATABANK NAME=gpr1 START=0xA0 END=0xEF
DATABANK NAME=gpr2 START=0x110 END=0x16F
DATABANK NAME=gpr3 START=0x190 END=0x1EF
SHAREBANK NAME=gprnobnk START=0x70 END=0x7F
SHAREBANK NAME=gprnobnk START=0xF0 END=0xFF PROTECTED
SHAREBANK NAME=gprnobnk START=0x170 END=0x17F PROTECTED
SHAREBANK NAME=gprnobnk START=0x1F0 END=0x1FF PROTECTED
En fin,
udata solo no te va a servir por lo antes mencionado
Y deberias usar
udata_shrCon lo cual te aparece en la ventana de variables como "Global Symbol" y si abris la ventanita de file Register, podes ver la memoria RAM y le pone los nombres ahi.
Creo que no queda otra que regresar al viejito MPLAB, ya que el nuevo pierde cantidad de funciones, lo que indicaría que el .asm se estaría extinguiendo....
Tengo entendido que esto viene del MPLAB 8.xx , nomas que el MPLAB8 te permitia agregar cualquier direccion, aca si no esta definido como dato, entonces no te lo toma como una variable, y solo podrias ver las posiciones de memoria pero sin ninguna etiqueta indicandote cual es cual
PD:
MPLAB X deberia incluir el archivo de linker al proyecto... pero no lo hace. teniendo que navegar por las carpetas para encontrarlo
.../Microchip/MPLABX/mpasmx/LKR
Asi tener un facil acceso y poder ver la memoria.