Autor Tema: error en c18  (Leído 2317 veces)

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

Desconectado 1mas

  • PIC10
  • *
  • Mensajes: 7
error en c18
« en: 27 de Junio de 2008, 14:16:09 »
 :(Este es el erro r que me pone al compilar:
MPLINK 4.15, Linker
Copyright (c) 2007 Microchip Technology Inc.
Error - section '.idata_Proyectofinal.o' can not fit the section. Section '.idata_Proyectofinal.o' length=0x0000013f
Errors    : 1
  :shock: :shock: :shock: :shock:
no se que significa alguien lo sabe? :(
Es un programa bastante largo, ¿puede ser por insuficiencia de memoria?
Si alguien sabe lo que significa se lo agradecería yo no tengo ni idea.

Desconectado Darukur

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 464
    • Informacion, recursos y ejemplos para desarrollos con microcontroladores
Re: error en c18
« Respuesta #1 en: 27 de Junio de 2008, 15:43:47 »
Te dice que no tiene suficiente espacio para alocar algun bloque de memoria (tanto de programa o ram no sabria decirte).
Por la cantidad (0x13f) parece que estas tratando de poner algo en un lugar donde no deberias (como cuando quieres hacer entrar el programa de interrupciones en la pos del vector de interrupciones sin generar el salto a otra poscion de memoria).
En este caso es RAM asi que puede ser que no encuentra un espacio contiguo lo suficientemente grande como para alocar tu bloque de memoria.
Fijate el modelo de memoria que elejiste en las opciones del compilador o modifica el linker script de tu micro para hacer un espacio contigua mas grande.

Saludos.
El que no sabe lo que busca no entiende lo que encuentra.
Mi Pagina Web:  http://www.sistemasembebidos.com.ar
Mi foro:             http://www.sistemasembebidos.com.ar/foro/

Desconectado 1mas

  • PIC10
  • *
  • Mensajes: 7
Re: error en c18
« Respuesta #2 en: 28 de Junio de 2008, 06:04:47 »
Muchas gracias por tu respuesta.
no querría cagarla al modificar el linker. Si fueses tan amable de decirme como hacerlo
mi linker pone esto:
// File: 18f4620.lkr
// Sample linker script for the PIC18F4620 processor

LIBPATH .

FILES c018i.o
FILES clib.lib
FILES p18f4620.lib

CODEPAGE   NAME=vectors    START=0x0            END=0x29           PROTECTED
CODEPAGE   NAME=page       START=0x2A           END=0xFFFF
CODEPAGE   NAME=idlocs     START=0x200000       END=0x200007       PROTECTED
CODEPAGE   NAME=config     START=0x300000       END=0x30000D       PROTECTED
CODEPAGE   NAME=devid      START=0x3FFFFE       END=0x3FFFFF       PROTECTED
CODEPAGE   NAME=eedata     START=0xF00000       END=0xF003FF       PROTECTED

ACCESSBANK NAME=accessram  START=0x0            END=0x7F
DATABANK   NAME=gpr0       START=0x80           END=0xFF
DATABANK   NAME=gpr1       START=0x100          END=0x1FF
DATABANK   NAME=gpr2       START=0x200          END=0x2FF
DATABANK   NAME=gpr3       START=0x300          END=0x3FF
DATABANK   NAME=gpr4       START=0x400          END=0x4FF
DATABANK   NAME=gpr5       START=0x500          END=0x5FF
DATABANK   NAME=gpr6       START=0x600          END=0x6FF
DATABANK   NAME=gpr7       START=0x700          END=0x7FF
DATABANK   NAME=gpr8       START=0x800          END=0x8FF
DATABANK   NAME=gpr9       START=0x900          END=0x9FF
DATABANK   NAME=gpr10      START=0xA00          END=0xAFF
DATABANK   NAME=gpr11      START=0xB00          END=0xBFF
DATABANK   NAME=gpr12      START=0xC00          END=0xCFF
DATABANK   NAME=gpr13      START=0xD00          END=0xDFF
DATABANK   NAME=gpr14      START=0xE00          END=0xEFF
DATABANK   NAME=gpr15      START=0xF00          END=0xF7F
ACCESSBANK NAME=accesssfr  START=0xF80          END=0xFFF          PROTECTED

SECTION    NAME=CONFIG     ROM=config

¿Qhe tendria que hacer?
¿un banco mas grande y despues forzar que los datos entren en ese banco como con la interrupción?
Tampoco entiendo por que lo tiene que meter en un espacio contiguo por que lo que yotengo no es una cadena de caracteres muy grandes, sino muchas pequeñas y notineen por que estar todas en el mismo banco. ¿Por que las intenta meter todas juntas?
¿Si las forzara a una posicion de memoria se arreglaria?

Espero no ser muy pesado con tantas preguntas
Muchas gracias
 

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: error en c18
« Respuesta #3 en: 30 de Junio de 2008, 14:26:12 »
1mas, el error que te da es de asignación de memoria ram.  Quieres asignar más memoria de lo que cabe en un sector definido en el linker file.  Debieras unir tu sección gpr0

Por ejemplo, cambiando


DATABANK   NAME=gpr0       START=0x80       END=0xFF
DATABANK   NAME=gpr1       START=0x100      END=0x1FF


por :


DATABANK   NAME=miram      START=0x80       END=0x1FF



De todas formas, fíjate de cambiar en tu proyecto, en las opciones del C18, poner Multi-Bank Model ya que a partir de ahora, el direccionamiento a la memoria deberá hacerse cargando los FSRxH y FSRxL para poder direccionar los más de 256 bytes del arreglo que estás queriendo definir.  Digo 'arreglo' porque casi con seguridad mi intuición que estás queriendo hacer usar algo de eso :) :)


- 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 1mas

  • PIC10
  • *
  • Mensajes: 7
Re: error en c18
« Respuesta #4 en: 01 de Julio de 2008, 08:58:59 »
muchas gracias pero como eran pocas cadenas lo que hice es poner el inicio de las cadenas al principio de un banco de ram y me cogió. :)
#pragma idata cadenas=0x100
todas las cadenas
#pragma idata
Pero lo que tu me as dicho me sera de mucha utilidad cuando sea muy grande las cadenas de caracteres.

Muchas gracias :) :)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: error en c18
« Respuesta #5 en: 01 de Julio de 2008, 12:20:01 »
muchas gracias pero como eran pocas cadenas lo que hice es poner el inicio de las cadenas al principio de un banco de ram y me cogió. :)
#pragma idata cadenas=0x100
todas las cadenas
#pragma idata
Pero lo que tu me as dicho me sera de mucha utilidad cuando sea muy grande las cadenas de caracteres.

Muchas gracias :) :)

Me alegro que te haya funcionado. 

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)