TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: damago en 01 de Febrero de 2005, 05:22:00

Título: Uso de vector de 2 dimensiones localizado en la direccion "X"
Publicado por: damago en 01 de Febrero de 2005, 05:22:00
A ver que  no lie con el titulo del hilo jeje

Se trata de si algun avispao se le ocurre como utilzar un vector de 2 dimensiones (vec[10][10]) pero que este fisicamente en la zona de ram que desees.

Ej;

char vec[10][10];

vec[0][3] = 7;

esto no es lo que quiero (ya que el compilador me pone el vector ande le sale las narices)

Quiero que vec[10][10] empiece por ejemplo en la direccion 0x5555 por decir algo.

Se que una opcion es utilizar un puntero y por ej:

char *puntero=(char*)0x5555;

columna=2;
fila=4;
*(puntero+10*fila+ columna); //equivale a vec[columna][fila]

pero alguien sabe como definir ese vector de 2 dimensiones en la direccion 0x5555 por ej., para usarlo luego de esta manera:

vector
Título: RE: Uso de vector de 2 dimensiones localizado en la direccion "X"
Publicado por: Modulay en 01 de Febrero de 2005, 05:52:00
Podrias probar a usar la directiva #LOCATE,aunque no sé si se podrá hacer con un tipo compuesto,pero por probar...
Título: RE: Uso de vector de 2 dimensiones localizado en la direccion "X"
Publicado por: damago en 01 de Febrero de 2005, 06:19:00
Hola modulay, buenos dias.

La directiva #LOCATE es estandar de C para todos los compiladores?? o de algun compilador en concreto que utilizas?

Es que no me suena, me puedes poner un ejemplo o decirme donde puedo buscarlo? He intentado poner locate en google y no he encontrado nada.

Un saludo.
Título: RE: Uso de vector de 2 dimensiones localizado en la direccion "X"
Publicado por: gfp en 01 de Febrero de 2005, 13:15:00
Por que no buscas la aplicacion de #LOCATE  en el manual de CCS?. Allí está a version 2004 en formato .pdf, quizá te sirva..!

gfp Sonrisa
Título: RE: Uso de vector de 2 dimensiones localizado en la direccion "X"
Publicado por: damago en 01 de Febrero de 2005, 15:26:00
Hola gfp, ya he visto un ejemplo y el uso del #locate en el manual del CCS de pic. Sonrisa

El problema es que es una directiva particular de este compilador. Si utilizo otro compilador, para el micro que sea, no existe.

Es una pijada, ya que con un puntero puedes hacer lo que pretendia, pero tenia la curiosidad de si habia algo estandar que permite en C hacerlo.

Un saludo. Buenas noches.Giño
Título: RE: Uso de vector de 2 dimensiones localizado en la direccion "X"
Publicado por: Nocturno en 02 de Febrero de 2005, 02:50:00
Damago, me ha sorprendido tu post porque haces un estupendo uso de los punteros, y son un concepto que no acabo de asimilar.

Tengo una duda con la sentencia:
char *puntero=(char*)0x5555;

¿Sería igual hacer esto?:
puntero=0x5555;

Si no fuera igual, ¿porqué?

Gracias
Título: RE: Uso de vector de 2 dimensiones localizado en la direccion "X"
Publicado por: damago en 02 de Febrero de 2005, 07:01:00
Hola nocturno66,

char *puntero = (char *) 0x5555;

y

char *puntero = 0x5555;

y

char *puntero;
puntero = 0x5555;

puede ser lo mismo depende del compilador.

Algunos compiladores te daran error si no haces el moldeo (osea convertir el dato de origen al mismo tipo de dato que el destino antes de asignarselo) .

Otros simplemente hacen la conversion y te daran un warning, y otros ni siquieran daran warning (tambien dependera de las opciones que se le pasen al compilador),

Por ej el borland C da un warning ante esto:

int a=5;
char b;

b=a;

pero hace bien la conversion ...b=5;

si ponemos:

b= (char) a;

no dara el warning, ya que antes de asignarlo a b, convierte el valor de "a"  a tipo char.

Echale un ojo a esta pagina :
http://docs.hp.com/en/B3901-90007/ch05s05.html