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
sowas in etwa?
1 | CAN_MSG bla; |
2 | uint8_t array[40]; |
3 | memcpy(array, &bla, sizeof(CAN_MSG); |
4 | memset(array, 0, 40); |
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...
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;
"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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.