Autor Tema: Uso de vector de 2 dimensiones localizado en la direccion "X"  (Leído 2724 veces)

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

Desconectado damago

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
Uso de vector de 2 dimensiones localizado en la direccion "X"
« 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
  • [y] = blablablabla
    y no asi:
    *(puntero + x*10 + y) = blablabla

    No es cuestion de optimizar mas o menos, sino solo saber si acepta el C estandar esto.

    Un saludo. Hasta luego!Giño

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Uso de vector de 2 dimensiones localizado en la direccion "X"
« Respuesta #1 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...

Desconectado damago

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
RE: Uso de vector de 2 dimensiones localizado en la direccion "X"
« Respuesta #2 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.

Desconectado gfp

  • PIC18
  • ****
  • Mensajes: 274
RE: Uso de vector de 2 dimensiones localizado en la direccion "X"
« Respuesta #3 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

Desconectado damago

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
RE: Uso de vector de 2 dimensiones localizado en la direccion "X"
« Respuesta #4 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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: Uso de vector de 2 dimensiones localizado en la direccion "X"
« Respuesta #5 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

Desconectado damago

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 320
RE: Uso de vector de 2 dimensiones localizado en la direccion "X"
« Respuesta #6 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



 

anything