Forum: Mikrocontroller und Digitale Elektronik MSP430 Verwendung von long und unsigned long


von Matthias M. (triniter)


Lesenswert?

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.

von Stefan (Gast)


Lesenswert?

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!

von STS (Gast)


Lesenswert?

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.

von Matthias M. (triniter)


Lesenswert?

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.

von Christian R. (supachris)


Lesenswert?

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
Noch kein Account? Hier anmelden.