Hallo
ich habe zwei struct erstellt um zwei Register nachzubilden.
Nun möchte ich den Inhalt von
struct struct_Src {
unsigned int a: 4;
unsigned int b: 4;
unsigned int c: 8;
unsigned int d: 8;
unsigned int e: 8;
}Src;
an
struct struct_Dst {
unsigned int dst: 16;
}Dst;
übergeben.
Hier ist mein Ansatz
=======================================================================
#include"stdio.h"
typedef struct struct_Src {
unsigned int a: 4;
unsigned int b: 4;
unsigned int c: 8;
unsigned int d: 8;
unsigned int e: 8;
}Src;
typedef struct struct_Dst {
unsigned int dst: 16;
}Dst;
void set(Src* pset){
pset->a = 1;
pset->b = 2;
pset->c = 1;
pset->d = 1;
pset->e = 0;
}
void cpy(Src* pSrc, Dst* pDst)
{
pDst = pSrc;
}
int main(void)
{
Src mySrc;
Dst myDst;
set(&mySrc);
cpy(&myDst);
return 0;
}
=================================================
Da mein Lösungsansatz nicht funzt wäre ich über einen Lösungsansatz sehr
dankbar!
Frohe Ostern!!!
Jens k. schrieb: > nicht funzt Das ist mein Vorschlag für die Fehlerbeschreibung des Tages. Wie willst du eigentlich 4+4+8+8+8 Bit aus Src in den 16 Bit aus Dst unterbringen?
Du möchtest einen Speicherbereich unterschiedlich interpretieren? Dann schau dir mal das Schlüsselwort union an.
@mfgkw, union danke für die rasche Antowrt. Ja mggkw, funzt nicht ist eine sehr vage Beschreibung meines Problems. Da dieses Gebiet für mich Neuland ist konnte ich die Problemstellung nicht besser umreißen. Srry dafür. Also nochmal ausführlicher: Src -> zu übertragende Nachricht Dst -> mein Transfer Register Mal angenommen die Nachricht ist 32-bit groß, aber das Transfer-Register hat nur eine Kapazität von 16-bit. Also würde ich gerne die ersten 16-bit von Src übergeben und nach dem Transfer die nächsten 16-bit. Gibt es da eine bestimmte vorgehensweise ? Kann man Src als char casten und mit einer for schleife nur die ersten 16-bit senden ? Gruß
ja, kann man - auch wenn man Probleme mit Portabilität bekommen kann. Da du aber gar keine Byte haben willst, sondern jeweils 16 Bit, könnte man auch auf uint16_t casten (natürlich mit ähnlichen Problemen, nur in diesem Fall einfacher als char*). Man kann auch eine union verwenden (Prinzipiell mit denselben Problemen). In beiden Fällen sollte man sich im Klaren sein, was in welcher Hälfte steht und ob der Empfänger das genauso sieht (Litte endian/big endian). Das Thema wird hier alle paar Tage durchgekaut. Es sollte mit wenig Aufwand einiges dazu zu finden 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.