Accesso ad una typdef Struct per lettura byte a byte

Ciao a tutti,
ho realizzato una typedef struct con una serie di valori che poi utilizzo per comunicare col PC. Ho collegato una scheda ethernet e spedisco il pacchetto della struct con il comando Serial2.write((byte *)&UTC, sizeof(UTC_Packet));

la mi struttura è

typedef  struct {
  uint16_t startU;
  uint16_t SampleTimeFine;
  int Year;
  byte Month;
  byte Second;
  byte Day;
  byte Minute;
  byte Hour;
  uint16_t Milliseconds;
  uint16_t ackU;
} __attribute__((__packed__))UTC_Packet;

ora all'interno di UTC_Packet.ackU vorrei avere il CRC del pacchetto . Ho trovato una libreria che calcola il CRC 16 passando i singoli byte. Come posso puntare ai singoli byte della struttura e calcolare quindi il CRC?
Grazie a tutti!

Con un puntatore, ma i comando ha anche quanti byte ? Quello lo calcoli con un sizeof della struct

Ciao! Grazie per la risposta!
La size la calcolo già col size of(struct) ma purtroppo con i puntatori non sono molto capace. Come posso scrivere la funzione ? Cioè è possibile avere tipo un array del tipo byte pippo[size of (struttura) e poi pippo[k]=byte n della struttra ?? spero di essere stato chiaro.

Ho provato con funzioni del tipo byte *pippo = (byte *)&struttura,1; ma non mi funziona niente >:( >:( :confused:

Serve il link alla libreria ed il comando che usi per calcolare il CRC
Un array in C non può avere lunghezza calcolata a runtime.
Un array il C lo vede come un puntatore e poi con l'indice un aumento dell'indirizzo.

Ciao, allego il codice completo. La libreria è la uCRC16BPBLib.h di Naguissa. Ora il punto non credo sia una questione di libreria ma piuttosto come accedere a quella struct maledetta. E’ molto comoda per l’invio di dati via seriale ma non riesco a trattarla e farla diventare un array di byte ed accedere ai singoli byte per il calcolo del CRC.

Grazie!

#include <Ethernet.h>
#include "uCRC16BPBLib.h"
#include <SPI.h>
#include <Wire.h>
#define RST_ETH 9
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 55, 155);
byte server[] = { 192, 168, 55, 100 }; // SI MOTION

EthernetClient client;
uCRC16BPBLib crc; 
uint16_t crcStringBytes(byte * string, uint16_t length) {
  uint16_t i;
  crc.reset();
  for (i = length; i > 0; string++, i--) {
    crc.feedByte(*string);
  }
  return crc.getResult();
}

typedef  struct {
  uint16_t startU;
  uint16_t SampleTimeFine;
  int Year;
  byte Month;
  byte Second;
  byte Day;
  byte Minute;
  byte Hour;
  uint16_t Milliseconds;
  uint16_t ackU;
} __attribute__((__packed__))UTC_Packet;

void setup() {

  pinMode(RST_ETH, OUTPUT);
  digitalWrite(RST_ETH, LOW);    // begin reset the WIZ820io
  delay(1);
  digitalWrite(RST_ETH, HIGH);    // begin reset the WIZ820io
  delay(1);
  Serial.print(crcStringBytes(&UTC_Packet, (sizeof(UTC_Packet))), HEX);
}
void loop(){

}

Sandroelec:
Ho provato con funzioni del tipo byte *pippo = (byte *)&struttura,1; ma non mi funziona niente >:( >:( :confused:

È il virgola 1, toglilo

E studia l’operatore virgola

Ciao Sandroelec, come suggerito da C1P8 tramite l’istruzione byte *pippo = (byte *)&struttura ottieni il puntatore “pippo” che punta al primo byte della struttura.
A questo punto per scansionare l’intera struttura ti basta un ciclo “for” incrementando ogni volta il valore del puntatore:

	byte *pippo = (byte *)&struttura;
	for (int n = 0; n < sizeof(struttura); n++)
		byte Valore_n_Struttura = *pippo++;

Ciao a tutti e grazie per le risposte! scusate ma purtroppo sui puntatori e l'operatore virgola sono proprio scarso farò dei ripassi. :confused: :confused:
Tuttavia correggendo il codice in questo modo mi resta un problema, l'indianess...
Per calcolare il CRC avrei bisogno di un array con i dati in forma normale quindi Hbyte,LowByte etc
Invece accedendo all'array mi ritrovo con i dati girati...
Come posso fare?

alla fine ho cambiato libreria pe ril CRC ed uso la CRC.h di Hideakitai e funziona benissimo calcola direttamente su array!
Grazie