Autor Tema: rotar un vector  (Leído 4316 veces)

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

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
rotar un vector
« en: 04 de Mayo de 2009, 17:15:44 »
Seria correcto hacer esto:

Código: [Seleccionar]
byte data[2];

shift_left(data,2,bit);

y si es correcto donde quedaria la parte alta y baja de los bit, en data[0]; ? o en data[1]; ?

Un saludo.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: rotar un vector
« Respuesta #1 en: 04 de Mayo de 2009, 18:11:28 »
Hola Pepe

¿A qué te refieres con parte alta y baja de los bit? Creo que te refieres a en qué parte inserta el bit, data[0] o data [1]. Leyendo el manual de CCS:

Bit 0 of the lowest byte in RAM is treated as the LSB.

Es decir que el bit se insertará en el bit 0 de data[0] si es que usas shift_left(). Si usaras shift_right() entonces el bit se insertará en el bit 7 de data[1], según entiendo.

Esto tiene que ver con la forma en que se almacenan las variables mayores a 8 bits en memoria ram (big endian y little endian).

http://www.ibm.com/developerworks/aix/library/au-endianc/index.html?ca=drs-

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: rotar un vector
« Respuesta #2 en: 04 de Mayo de 2009, 22:20:23 »
Para que funcione la funcion debe ser:

Código: C#
  1. shift_left(&data,2,bit);
El papel lo aguanta todo

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: rotar un vector
« Respuesta #3 en: 04 de Mayo de 2009, 22:29:56 »
No MLO. La función está bien escrita por Pepe.

data es un arreglo y si se usa 'data' es la dirección ram del primer elemento del arreglo. Si se quisiera usar con ampersand sería así:

Código: [Seleccionar]
shift_left(&data[0],2,bit);
'data' a secas es un apuntador.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: rotar un vector
« Respuesta #4 en: 04 de Mayo de 2009, 23:26:29 »
Ah.

Claro, yo la tengo dentro de un for

Código: C#
  1. for(l=0;l<=31;l++)
  2.                 {
  3.                         #ifndef PRUEBA
  4.                         output_bit(DATA, shift_left(&row_aux[k],4,0));
  5.                         #else
  6.                         off(DATA);
  7.                         #endif
  8.                         off(CLK);
  9.                         on(CLK);       
  10.                 }

Ahi si es necesario el &.

Ok.
El papel lo aguanta todo

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: rotar un vector
« Respuesta #5 en: 05 de Mayo de 2009, 11:36:39 »
Exacto, con índice sí lleva ampersand.  :mrgreen:

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: rotar un vector
« Respuesta #6 en: 06 de Mayo de 2009, 18:50:19 »
Gracias por las respuestas.

Con la instruccion de rotacion, se rotan 16 bit, me referia de esa palabra de 16 bit, donde queda el bit de menos peso, b0 y donde el de mayor peso, b15.

De la respuesta de migsantiago deduzco que el bo es el bo de data[0], y el b15 el b7 de data[1].

Saludos.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: rotar un vector
« Respuesta #7 en: 06 de Mayo de 2009, 21:18:22 »
Sí, el bit 0 de data[0] es el que entra con shift_left().

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: rotar un vector
« Respuesta #8 en: 07 de Mayo de 2009, 17:49:02 »
Sigo con los vectores, no he querido abrir otro hilo. La duda es si seria correcto hacer esto:

definir la variable:

int1 dato[16];

operar con el vector de bit, y despues usar 'dato' como una variable tipo int16:

por ejemplo  dato=0x1234;

Un saludo.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: rotar un vector
« Respuesta #9 en: 07 de Mayo de 2009, 19:34:16 »
CCS no permite arreglos de bits en su versión 3.x. No sé si ya se pueda en la 4.x.

EDITO:

A partir de alguna versión que salió en junio 2008 ya se pueden usar arreglos de bits:-/

Citar
Arrays of
bits (INT1) in RAM are now  supported.  Pointers to bits are not permitted.
« Última modificación: 07 de Mayo de 2009, 19:37:25 por migsantiago »

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: rotar un vector
« Respuesta #10 en: 07 de Mayo de 2009, 22:22:07 »
Sera que algun dia se podra apuntar a una constante? o eso queda solo en mi imaginacion.
El papel lo aguanta todo


 

anything