mikrocontroller.net

Forum: PC-Programmierung memcpy und verschiede Datentypen


Autor: Zween (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuche eine Array mit 48 Bits mittels memcpy auf ein anderes array zu 
kopieren.

Nun ist mein Problem, dass ich nicht an den Anfang des Zielarray 
kopieren will/darf, sondern ab Position 10. Weiteres Problem Array1 ist 
ein Bitfeld, Array2 ein Bytefeld.

Also:

memcpy adr(Array1[0]), adr(Array2[10]), 6;

Dies funktioniert nicht!?

Als Ergebis kommt raus, dass jedes der 6 Bytes zwar beschrieben wird, 
aber immer nur jeweils das 1. Bit in den 6 Bytes?!
Kann mir einer erklären warum und eine Lösung mit memcpy anbieten?

Danke

Zween

Autor: Martin L. (melvin_the_moose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> memcpy adr(Array1[0]), adr(Array2[10]), 6;
>
> Dies funktioniert nicht!?

Welche Programmiersprache ist das?

In ANSI C (string.h) ist memcpy wie folgt deklariert:
void* memcpy (void* dest, const void* src, size_t len);

Also zuerst den Zeiger auf das Ziel, dann den Zeiger auf die Quelle.

Vorschlag für den Aufruf (unter der Annahme, daß Array2[] das Zielarray 
ist...):
(void) memcpy ((void*) &Array2[10], (const void*) &Array1[0], 6);

Gruß

Martin

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch:
Was ist in diesem Zusammenhang ein Bitfeld?

memcpy kopiert einfach nur eine Anzahl von Bytes von einer
Adresse nach einer anderen Adresse. Welcher Datentyp da dahinter
liegt, interessiert memcpy nicht.

Wenn da also was anderes kopiert wird, also du erwartest, dann
wird höchstwahrscheinlich das Speicherlayout der Quelle oder
des Ziels anders aussehen als du denkst.

Autor: Zween (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Ist Strukturierter Text in einer Automatisierungslösung...

In der Onlinehilfe des Pogramms ist es so definiert:

memcpy(ADR(Mem_Dest),ADR(Mem_Src),length);

Oben hab ich die Quelle und das Ziel vertauscht, ist im Programm richtig 
herum...

Also:
memcpy adr(Zielarray[10]), adr(Quellarray[0]), 6;

Deine Lösung funktioniert sicher in C... aber wie geb ichs in ST-Sprache 
ein...

Hab nach wie vor das Problem, dass nur das erste Bit des Zielarrays 
beschrieben wird und der Rest des Bytes unangetastet bleibt... des 
Weiteren is mir aufgefallen, dass das Bit was eigentlich an zweiter 
Stelle des 1 Bytes vom Zielarraybyte zu finden sein sollte auf das erste 
´Bit des 2. Zielarraybytes gelegt wird, das 3. Bit des Quellarray auf 
das 1.Bit des 3. Byte des Zielarrays usw.

Hilfe?! =)

LG

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In solchem Zusammenhang ist das physikalische Kopieren, wie memcpy es 
macht, die schlechteste Lösung, weil das Ergebnis Hardware- und 
Implementierungsabhängig ist.

In solchen Fällen sollte man logisch kopieren.

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.