Forum: Mikrocontroller und Digitale Elektronik Zeiger auf CAN-Struktur übergeben


von Florian S. (sirius7)


Lesenswert?

Hallo,

Ich habe ein Programm erstellt um CAN - Struktur mit Zeiger an die 
Sendefunktion:

1
CAN_Send(CANPacket * p) // Funktion bereits vorhanden

zu übergeben.


leider habe ich keine Möglichkeit zur Hand die von mir erstellte 
CAN-Sendetask zu prüfen, deswegen würde ich mich sehr freuen, ob mir 
jemand sagen würde, ob das Programm so funktionieren kann.
1
typedef struct{
2
3
  uint16_t ID;
4
  uint8_t DLC;
5
  uint8_t DATA[8];
6
7
} CANPacket;         //Struktur so vorgegeben
8
9
void CAN_Sendetask(void*)
10
{
11
  CANPacket newPacket;
12
13
  newPacket.ID=0x100; //nur als Beispiel
14
  newPacket.DLC=1; //1 Byte
15
  newPacket.DATA[8]=byte;
16
17
CAN_Send(&newPacket); // dieser Ausdruck interessiert mich am meisten,
18
                      // Ob man die Adresse der Struktur (&newPacket)
19
                      // in der Funktion vom Typ                                   
20
                      // CAN_Send(CANPacket * p) so übergibt.
21
}

ich wäre Euch sehr dankbar für Ihre Hilfe!

von holger (Gast)


Lesenswert?

>  newPacket.DATA[8]=byte;

Das Array geht nur von Index 0 bis 7. 8 ist daher falsch.

von B. S. (bestucki)


Lesenswert?

Alex S. schrieb:
> CAN_Send(&newPacket); // dieser Ausdruck interessiert mich am meisten,
>                       // Ob man die Adresse der Struktur (&newPacket)
>                       // in der Funktion vom Typ
>                       // CAN_Send(CANPacket * p) so übergibt.

Genau so wirds gemacht. Wenn CAN_Send die Struktur nicht modifiziert, 
könntest dir noch überlegen, ob du einen
1
const CANPacket *
übergeben willst, bzw. die Funktion CAN_Send anpassen.

von c-hater (Gast)


Lesenswert?

Alex S. schrieb:

> leider habe ich keine Möglichkeit zur Hand die von mir erstellte
> CAN-Sendetask zu prüfen, deswegen würde ich mich sehr freuen, ob mir
> jemand sagen würde, ob das Programm so funktionieren kann.

Das kommt allein darauf an, wie CAN_Send funktioniert. Synchron oder 
asynchron...

von Florian S. (sirius7)


Lesenswert?

super, vielen Dank für Eure Antworten!
Ihr habt mir sehr weitergeholfen!

von Lutz (Gast)


Lesenswert?

Alex S. schrieb:
> newPacket.DATA[8]=byte;

Woher kommt der Wert von "byte" in dieser Funktion?

von Lutz (Gast)


Lesenswert?

Nachtrag: Und warum einen void-Pointer als Parameter in der Funktion???

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.