mikrocontroller.net

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


Autor: Matthias Mayr (triniter)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon mal 'ne UNION probiert?
struct NAV_POSUTM
{
  unsigned long ITOW;
  long EAST;
  long NORTH;
  long ALT;
  char ZONE;
  char HEM;
};

union NAV_UNION
{
  NAV_POSUTM  nav_pos;
  char        nav_array[18];    
};

Erst alle ankommenden Daten wie bisher ins Array nav_array[] speichern.
Zum Verarbeiten dann die Struct verwenden!

Autor: STS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias Mayr (triniter)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.