Autor Tema: Iterar con una variable de estructura para operaciones. XC8.  (Leído 2410 veces)

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

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Teniendo una variable en una estructura que se llame:

estructura.variable;     

Si meto esa variable en una iteraccion para calcular un valor, da fallo. Por ejemplo:
Aqui se intenta calcular un CRC sobre 11 bytes. Su resultado es al azar, da lo que quiere. No funciona.

Código: C
  1. char name_sum[11] = {"1234567890"};
  2. estructura.variable = 0;
  3. for(int i=0;i<11 && name_sum[i];i++)    // Recorremos el array name_sum hasta encontrar (null) o hasta que recorra 11 bytes.
  4.      estructura.variable = ((estructura.variable >> 1) | ((estructura.variable & 0x01) << 7)) + name_sum[i];

Ahora en cambio si lo hago de la siguiente forma funciona perfectamente:

Código: C
  1. char name_sum[11] = {"1234567890"};
  2. uint8_t variable = 0;
  3. for(int i=0;i<11 && name_sum[i];i++)    // Recorremos el array name_sum hasta encontrar (null) o hasta que recorra 11 bytes.
  4.      variable = ((variable >> 1) | ((variable & 0x01) << 7)) + name_sum[i];
  5.    estructura.variable = variable;

La operación es idéntica en ambos casos, la diferencia es intentar iterar operaciones directamente sobre una variable de estructura. No le sienta bien.
O utilizar una variable local para iterar y luego asignar el resultado a la de la estructura, así si funciona.

  La pregunta es,  ¿ Es normal ?.     ¿ No se puede iterar directamente sobre una variable de una estructura? 


« Última modificación: 16 de Mayo de 2020, 09:45:50 por remi04 »

Conectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Iterar con una variable de estructura para operaciones. XC8.
« Respuesta #1 en: 16 de Mayo de 2020, 10:52:31 »
Pero la estructura como esta definida?

Yo compilo con XC8 y funcionan las dos.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Iterar con una variable de estructura para operaciones. XC8.
« Respuesta #2 en: 16 de Mayo de 2020, 10:56:20 »
Pero la estructura como esta definida?

Yo compilo con XC8 y funcionan las dos.
Código: C
  1. struct estructura1 {
  2.  uint8_t variable;
  3.  uint8_t variable2;
  4.  .........
  5. ........
  6. } estructura;

 Así.

Conectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Iterar con una variable de estructura para operaciones. XC8.
« Respuesta #3 en: 16 de Mayo de 2020, 11:27:14 »
En los dos casos devuelve el checksum  0x90 (144)

Que te devuelve a vos?

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Iterar con una variable de estructura para operaciones. XC8.
« Respuesta #4 en: 16 de Mayo de 2020, 13:55:12 »
En los dos casos devuelve el checksum  0x90 (144)

Que te devuelve a vos?

 Me devuelve 0xd8  siempre. Le envíe la cadena que le envíe.

   Pero calculando desde una variable local si que lo hace bien. 

  Grabado en el pic y sacando el valor por usart.  Nada de simuladores.

  También he de añadir que esto está metido en un programa de mas de 15.000 Lineas, pero en verdad la operación igualmente debería salir bien..

   


 

anything