Autor Tema: Declarando un array bidimensional problema con la RAM!!!!  (Leído 1863 veces)

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

Desconectado xesc0

  • PIC10
  • *
  • Mensajes: 22
Declarando un array bidimensional problema con la RAM!!!!
« 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.

Código: [Seleccionar]
#pragma udata tabla
unsigned char pixel [64][16];
#pragma udata

Error
Código: [Seleccionar]
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!

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Declarando un array bidimensional problema con la RAM!!!!
« Respuesta #1 en: 12 de Enero de 2014, 21:24:21 »
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

Desconectado xesc0

  • PIC10
  • *
  • Mensajes: 22
Re: Declarando un array bidimensional problema con la RAM!!!!
« Respuesta #2 en: 13 de Enero de 2014, 08:55:20 »

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:
Código: [Seleccionar]
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:
Código: [Seleccionar]
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:

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Declarando un array bidimensional problema con la RAM!!!!
« Respuesta #3 en: 13 de Enero de 2014, 09:17:49 »
Disculpen mi ignorancia, pero me podrían explicar qué es eso?
Saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado xesc0

  • PIC10
  • *
  • Mensajes: 22
Re: Declarando un array bidimensional problema con la RAM!!!!
« Respuesta #4 en: 13 de Enero de 2014, 20:09:25 »
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!
« Última modificación: 13 de Enero de 2014, 20:28:03 por xesc0 »

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Declarando un array bidimensional problema con la RAM!!!!
« Respuesta #5 en: 14 de Enero de 2014, 10:59:35 »
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.

Desconectado xesc0

  • PIC10
  • *
  • Mensajes: 22
Re: Declarando un array bidimensional problema con la RAM!!!!
« Respuesta #6 en: 15 de Enero de 2014, 15:30:43 »

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.