Hola A todos..
He estado estos días realizando un programa con un pic16f876a, el cual tiene 368 registros de ram disponibles, sin embargo al compilar mi codigo sdcc me genera el asm pero al realizar el link , gplink me devuelve un error:

no target memory available for section "UDL_FuenteDigital_0"

al examinar el Asm generado encuentro esta section, en donde se reserva los registros de ram, para este programa.

;--------------------------------------------------------
; compiler-defined variables
;--------------------------------------------------------
UDL_FuenteDigital_0 udata
r0x101A res 1
r0x101C res 1
r0x101B res 1
r0x1054 res 1
r0x1075 res 1
r0x1074 res 1
r0x1073 res 1
r0x1076 res 1
r0x106B res 1
r0x106C res 1
r0x106D res 1
r0x106F res 1
r0x106E res 1
r0x1070 res 1
r0x1071 res 1
r0x1061 res 1
r0x1068 res 1
r0x1069 res 1
r0x106A res 1
r0x1063 res 1
r0x1064 res 1
r0x1065 res 1
r0x1066 res 1
r0x1062 res 1
r0x1056 res 1
r0x1055 res 1
r0x1057 res 1
r0x1058 res 1
r0x1059 res 1
r0x105A res 1
r0x105B res 1
r0x105D res 1
r0x105C res 1
r0x105E res 1
r0x103B res 1
r0x103A res 1
r0x103C res 1
r0x103E res 1
r0x104C res 1
r0x104D res 1
r0x104E res 1
r0x1050 res 1
r0x104F res 1
r0x1051 res 1
r0x1052 res 1
r0x103F res 1
r0x1040 res 1
r0x1041 res 1
r0x1042 res 1
r0x1043 res 1
r0x1044 res 1
r0x1046 res 1
r0x1045 res 1
r0x1047 res 1
r0x1078 res 1
r0x1077 res 1
r0x1079 res 1
r0x104A res 1
r0x1049 res 1
r0x104B res 1
r0x1033 res 1
r0x1032 res 1
r0x1034 res 1
r0x1036 res 1
r0x1035 res 1
r0x1037 res 1
r0x1038 res 1
r0x1039 res 1
r0x102F res 1
r0x102E res 1
r0x1031 res 1
r0x1030 res 1
r0x102B res 1
r0x102A res 1
r0x102D res 1
r0x102C res 1
r0x101D res 1
r0x101E res 1
r0x1020 res 1
r0x101F res 1
r0x1021 res 1
r0x1022 res 1
r0x1023 res 1
r0x1024 res 1
r0x1025 res 1
r0x1027 res 1
r0x1026 res 1
r0x1029 res 1
r0x1028 res 1
_putdec_dtmp_1_1 res 1
_putdec_d0_1_1 res 1
_putdec_d1_1_1 res 1
_putdec_d2_1_1 res 1
_putdec_d3_1_1 res 1
_putdec_d4_1_1 res 1
_lcd_dec_dtmp_1_1 res 1
_lcd_dec_d0_1_1 res 1
_lcd_dec_d1_1_1 res 1
_lcd_dec_d2_1_1 res 1
_lcd_dec_d3_1_1 res 1
_lcd_dec_d4_1_1 res 1

Según lo que he determinado por alguna razón el gplink me trata de asignar todas estas variables en el banco 2 de registros del pic16876A, como solo este tiene 96 registros (desde 0x110 a 0x16F) y la requerida cantidad es mayor, me genera este error, pero no entiendo porque solo trata de crear estas variables en el banco 2, si el banco 1 y banco 3 estan sin usar (192 registros libres).

Por lo cual no se si se trata de un problema del código generado por SDCC el cual no considera esto, y no separa estas variables en 2 secciones o algo asi.. o es del gpasm o gplink que no redefine las direcciones del estas variables.

Ademas SDCC en el asm que genera utiliza la directiva UDATA y RES para asignar RAM pero no se quien establece en que lugares debe quedar estos registros.

Una de mis ultimas pruebas fue tomar el codigo generado por sdcc (asm) y separar en 2 partes el area de variables con dos etiquetas y ensamblarlo usando Pikdev

UDL_FuenteDigital_0 udata
r0x101A res 1
r0x101C res 1
r0x101B res 1
r0x105F res 1
..... hasta 96 registros
UDL_FuenteDigital_OTRO udata
r0x101A res 1
r0x101C res 1
r0x101B res 1
r0x105F res 1
..... hasta 96 registros
UDL_FuenteDigital_OTRO udata
_putdec_d1_1_1 res 1
_putdec_d2_1_1 res 1
_putdec_d3_1_1 res 1
_putdec_d4_1_1 res 1
_lcd_dec_dtmp_1_1 res 1
_lcd_dec_d0_1_1 res 1
_lcd_dec_d1_1_1 res 1
_lcd_dec_d2_1_1 res 1
_lcd_dec_d3_1_1 res 1
_lcd_dec_d4_1_1 res 1

Esto con esto por lo menos me genera el hex, sin problemas no lo que probado para ver si este funciona correctamente, pero deberia funcionar … eso creo. .jajaja.

Espero si alguien me puede orientar con este problema.

atte.
RiSanti