TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: 1mas 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.
-
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.
-
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
-
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 :) :)
-
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 :) :)
-
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