mikrocontroller.net

Forum: Compiler & IDEs SRAM mehrfach ausnutzen


Autor: Matthias K. (matthiask)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Matthias K. (matthiask)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau das ist es. Danke für Deine schnelle Hilfe.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.