Ich brauche einen neuen Denkanstoß. Während der Laufzeit soll ein großer
SRAM-Bereich (ATmega) zur Datenzwischenspeicherung verwendet werden. Das
Datenformat kann vom Benutzer im Menü eingestellt werden und
unterscheidet sich vom Umfang her. Es kann immer nur eins verwendet
werden. Im Prinip:
struct tpr_sp1 { // belegt 8 Byte
unsigned char tpr1;
unsigned char tpr2;
unsigned char tpr3;
unsigned char status;
unsigned long zeitstempel;
};
struct tpr_sp1 tpr1[100]; // belegt 8 x 100 Byte = 800 Byte
ODER
struct tpr_sp2 { // belegt 4 Byte
unsigned char tpr1;
unsigned char tpr2;
unsigned char tpr3;
unsigned char status;
};
struct tpr_sp2 tpr2[200]; // belegt 4 x 200 Byte = 800 Byte
Ich brauche aber immer nur eine Struktur, praktisch im gleichen
Speicherbereich. Da die 2. Struktur nur halb so groß ist, könnte ich
doppelt so viel Datensätze bei gleichen RAM-Bedarf ablegen. Wenn ich es
über eine Union zusammenlege, wird wie zu erwarten auch für sp2 8 Byte
reserviert.
union tpr_union { // belegt 8 Byte
struct tpr_sp1 {
unsigned char tpr1;
unsigned char tpr2;
unsigned char tpr3;
unsigned char status;
unsigned long zeitstempel;
} sp1;
struct tpr_sp2 {
unsigned char tpr1;
unsigned char tpr2;
unsigned char tpr3;
unsigned char status;
} sp2;
};
union tpr_union tpr[100]; // belegt 8 x 100 Byte = 800 Byte
Wie löst man das am besten? Alternative wäre ein 800 Byte großes
Universal-Array, welche mit unterschiedlichen Indexen un Offsetwerten
verwaltet wird. Machbar, aber recht unübersichtlich.
union tpr_union {
struct tpr_sp1 {
unsigned char tpr1;
unsigned char tpr2;
unsigned char tpr3;
unsigned char status;
unsigned long zeitstempel;
} sp1[100];
struct tpr_sp2 {
unsigned char tpr1;
unsigned char tpr2;
unsigned char tpr3;
unsigned char status;
} sp2[200];
} tpr;
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.