Hallo zusammen, ich arbeite in folgender Umgebung: Ich benutze einen MSP430F169 und programmiere diesen mit dem IAR Embedded Workbench in C++ (C++ ist eine Vorgabe, bitte keine Diskussionen über Ressourcen). Der MSP430 steuert einen ublox LEA-4H an und ließt über die Serielle Schnittstelle die GPS- und Statusbotschaften NAV-POSUTM und NAV-STATUS aus. Mein Problem: Wie in der Antaris-Protokollspezifikation zu lesen ist, wird die GPS-Position in der Botschaft NAV-POSUTM als long EAST und long NORTH zurückgegeben. Um mit diesen Werten arbeiten zu können habe ich ein Struct für die Botschaft angelegt: struct NAV_POSUTM { unsigned long ITOW; long EAST; long NORTH; long ALT; char ZONE; char HEM; }; Die ankommenden Daten werden allerdings zuerst in ein char-Array abgespeichert. Mein Problem liegt nun darin, wie bekomme ich die 4 char Bytes aus der ankommenden Botschaft so verrechnet, dass der korrekte Wert in der Variable EAST bzw. NORTH abgespeichert wird, ich bin da gerade vollkommen ratlos. Danke für die Hilfe.
Schon mal 'ne UNION probiert?
1 | struct NAV_POSUTM |
2 | {
|
3 | unsigned long ITOW; |
4 | long EAST; |
5 | long NORTH; |
6 | long ALT; |
7 | char ZONE; |
8 | char HEM; |
9 | };
|
10 | |
11 | union NAV_UNION |
12 | {
|
13 | NAV_POSUTM nav_pos; |
14 | char nav_array[18]; |
15 | };
|
Erst alle ankommenden Daten wie bisher ins Array nav_array[] speichern. Zum Verarbeiten dann die Struct verwenden!
1. Overlay-Technik: Struct auf die Anfangsadresse des Array legen. Dann kann man das korrekte! Strukturelement auslesen 2. Quick an dirty: Mit Schiebe- und Oder-Befehlen Long aus Chars zusammensetzen.
OK, die Quick'n'Dirty Methode funktioniert tadellos, ich werd das mal in Bezug auf die Performance mit den anderen Methoden vergleichen. Danke euch für die Antworten.
Matthias Mayr wrote: > OK, die Quick'n'Dirty Methode funktioniert tadellos, ich werd das mal in > Bezug auf die Performance mit den anderen Methoden vergleichen. Danke > euch für die Antworten. Der Compiler erzeugt daraus in den meisten Fällen eh einen Byte-kopier-Befehl. Jedenfalls macht der GCC das immer so, wenn ich um 8 oder 16 oder 24 Stellen schiebe. Mit dem Struct-Overlay ist es vielleicht besser lesbar, der asm-Code wird dann das gleiche sein.
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.