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;
Genau das ist es. Danke für Deine schnelle Hilfe.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.