TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: xesc0 en 12 de Enero de 2014, 21:05:12
-
Muy buenas a todos,
Estoy intentando declarar un array bidimensional en C18, sin embargo me da error del linker en la compilación.
#pragma udata tabla
unsigned char pixel [64][16];
#pragma udata
Error
MPLINK 4.46, Linker
Device Database Version 1.11
Copyright (c) 1998-2011 Microchip Technology Inc.
Error - section '.udata_GLCDST.o' can not fit the section. Section '.udata_GLCDST.o' length=0x00000400
Errors : 1
Utilizo un pic 18F2550 tiene un espacio en la ram de 2048 y este array bidimensional ocupa 64x16=1024 así que no entiendo por qué no me deja compilarlo.
Alguna sugerencia?????????
Saludos!
-
debes editar el .lkr creo que era referente a tu pic, en este caso se llamara 18f2550.lkr situado en la carpeta del compilador. Y ahi editar las secciones para crear una con la capacidad de la tabla
-
debes editar el .lkr creo que era referente a tu pic, en este caso se llamara 18f2550.lkr situado en la carpeta del compilador. Y ahi editar las secciones para crear una con la capacidad de la tabla
Gracias MerLiNz!!! ahora veo claro el problema, como bien dices, no tenia declarado en DATABANK del linker un espacio para la variable, de ahí el error! :-/
Para quienes tengan el mismo problema que yo adjunto la parte del código que modifico para evitar el error:
Antes:
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
Ahora:
DATABANK NAME=tabla START=0x400 END=0x7FF PROTECTED
//DATABANK NAME=gpr5 START=0x500 END=0x5FF
//DATABANK NAME=gpr6 START=0x600 END=0x6FF
//DATABANK NAME=gpr7 START=0x700 END=0x7FF
Saludos!!! :grin:
-
Disculpen mi ignorancia, pero me podrían explicar qué es eso?
Saludos!
-
Disculpen mi ignorancia, pero me podrían explicar qué es eso?
Saludos!
Un array bidimensional es como una matriz, un array de arrays. Por ejemplo:
char array[3][6];
tiene 3 arreglos con 6 caracteres cada uno:
Array[0]{'a','b','c','d','e','f'};
Array[1]{'g','h','i','j','k','l'};
Array[2]{'0','1','2','3','4','5'};
entonces:
Array[0][2] = 'c'
Array[2][3] = '3'
Espero que haya quedado claro ;-)
Saludos!
-
Disculpen mi ignorancia, pero me podrían explicar qué es eso?
Saludos!
Un array bidimensional es como una matriz, un array de arrays. Por ejemplo:
char array[3][6];
tiene 3 arreglos con 6 caracteres cada uno:
Array[0]{'a','b','c','d','e','f'};
Array[1]{'g','h','i','j','k','l'};
Array[2]{'0','1','2','3','4','5'};
entonces:
Array[0][2] = 'c'
Array[2][3] = '3'
Espero que haya quedado claro ;-)
Saludos!
Creo que Gera se refería a la declaración de address en el link control file.
-
Las lineas Databank dentro del fichero .lkr hacen referencia al tamaño y posición de la memoria Ram. Lo que hice fue unificar tamaños y reservar la memoria con un protect para cuando declare una variable con un tamaño superior a lo normal no tener problemas con la ram.