Datum: 08.05.2008 12:50
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
Datum: 08.05.2008 13:03
> 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
Datum: 08.05.2008 13:22
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.
Datum: 08.05.2008 13:22
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
Datum: 08.05.2008 13:30
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 Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos verwenden, Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel