mikrocontroller.net

Forum: Compiler & IDEs *(uint16_t *)&test[0] = ady; ???


Autor: Schnarcher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
es ist schon spät, aber vileicht kann mir ja jedand den Ausdruck im
Betreff erklären!
Weiter unten steht der Kontext!
Währe ect super, Danke schon mal.


Code:

uint8_t test[10];
foo0()
{
  ...
  para[0] = 0x80;
  ...
}

foo1()
{
   ...
   *(uint16_t *)&test[0] = ady;

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
&test[0] ist identisch zu test selbst: es ergibt die (Anfangs-)
Adresse des Arrays test.

Diese wird als Zeiger auf einen vorzeichenlosen 16-bit-Integer
interpretiert, und auf die Adresse, auf die er zeigt, wird der
Wert ady geschrieben.

Warum jemand ein Array namens test aus vorzeichenlosen 8-bit-
Integers (uint8_t) zusammensetzt, um es dann aber mit 16-bit-
Integerwerten zu füllen, musst du den werten Autor fragen.

Autor: Der Albi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja. Man kann so z.B bequem auf die Bytes der Zahl zugreifen.
Also falls das obere UND das untere Byte für
Weiterverarbeitungsschritte benötigt wird ist die Methode
wahrscheinlich schneller als

char low = (char)INT16;
char hi  = (char)(INT16>>8);

Wobei: wenn INT16 bei mir eine Registervariable wäre (low und hi auch)
und der Compiler geschickt optimieren würde, dann wären das nur 2
mov's.
Also ist das bei kleinen Datenmengen relativ sinnlos.
Ich habe diese "Tricks" mal verwendet, als es draum ging aus einem
Speicherblock eine Struktur zu kopierten, die an beliebiger Stelle im
Block stehen konnte.. erleichtert ne Menge Schreibarbeit.


MFG

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.