Forum: Compiler & IDEs CAN LPC 1768 struct array


von Xentex (Gast)


Lesenswert?

Hallo,

Habe ein kleines Problem mit dem weiterverarbeiten von CAN Daten.
Diese lege ich in einem struct ab der in etwa so aussieht:

typedef struct
{
uint32_t Frame;
uint32_t MsgID;
uint32_t DataA;
uint32_t DataB;
} CAN_MSG;

Mit dem senden und empfangen der Daten habe ich keine Probleme.
Diese Daten die empfangen werden sollen nun irgendwie in ein Array[40] 
gelegt werden.
Dann wird das ganze per USB versendet. Und der Array inhalt gelöscht.

Hab mit struct und array noch nicht zumindest in Verbinding der beiden 
gearbeitet wäre also dankbar für einen kleinen Denkanstoß.


MfG

von ... (Gast)


Lesenswert?

sowas in etwa?
1
CAN_MSG bla;
2
uint8_t array[40];
3
memcpy(array, &bla, sizeof(CAN_MSG);
4
memset(array, 0, 40);

von Xentex (Gast)


Lesenswert?

Dachte eigentlich eher in diese Richtung:

Ich lege mir ein Array an:

CAN_MSG Massage_Buffer[40];


Die frage ist jetzt nur wie ich es möglichst geschickt anstelle, dass 
ich immer wenn eine CAN Botschaft ankommt diese im nächten Bereich des 
Arrays gespeichert wird. Also mit for Schleife ginge das aber das bringt 
mir irgendwie nichts, weil ich den Prozessor nicht die ganze Zeit in der 
Schleife rumlungern lassen kann, weil der auch noch andere Sachen zu tun 
hat...

von Xentex (Gast)


Lesenswert?

Hat sich erledigt aber vielen dank trotzdem :)


Hab jetzt einfach nen Flag in die ISR gemacht der immer wenn CAN 
Botschft ankommt inkrementiert wird und dann einfach Array[Flag] = 
Massage_Buffer;

von ... (Gast)


Lesenswert?

"Flag" ist zwar das falsche Wort dafür, aber im Prinzip wird das genau 
so gemacht. Such einfach hier im Forum mal nach Ringpuffer bzw. 
Ringbuffer.

von Xentex (Gast)


Lesenswert?

Wie ist denn dann das richtige Wort dafür ?

von ... (Gast)


Lesenswert?

In Deinem Fall "Index". Man kann das Ganze aber auch über Pointer 
implementieren. Ein Flag kennt im allgemeinen nur zwei Zustände.

Das was Du da baust ist im Prinzip eine Warteschlange bzw Queue. Eine 
Ringpuffer (ring buffer, circular buffer) ist spezielle Variante einer 
solche Warteschlange.
Wenn Du mal nach diesen Begriffen suchst, wirst Du jede Menge Infos dazu 
finden.

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.