SRAM mehrfach ausnutzen

OP #1634673
Lesenswert?
• ▲
▼
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.
Lesenswert?
• ▲
▼
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;

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.