- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 26

Thema: Array-Alternative

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von .:Sebastian:.
    Registriert seit
    07.01.2006
    Ort
    Arkon I
    Beiträge
    203
    Moin

    Beschreibe doch mal genauer was du ablegen willst.

    Ich vermute einfach mal :
    5 Animationen mit 200 Frames wobei jedes Frame 9 * 16bit (oder Pixel) hat.

    Jetzt ist die Frage ist das Array hardcoded (also schon zu Compilezeit fest) oder überträgst du es zu Laufzeit z.B. via UART zum uC ?
    Ich vermute mal letzteres weil wenn das Array konstant wäre, konnte man es ja einfach kleiner machen in dem man die unnötigen Frames weglässt.

    Wenn das ganze Laufzeit auf den uC übertragen wird, kannst du das ganze z.B. als verkettete Liste realisieren, musst dich aber selber um das beschaffen und freigeben von Speicher kümmern (siehe dazu malloc http://www.nongnu.org/avr-libc/user-manual/malloc.html und free http://tinyurl.com/7gdvqfc ).
    Allerdings bekommst du damit auch nicht MEHR Speicher.
    Es ist dann wie PicNick angedeutet hat. Da hast zwar freien Speicher, den musst du aber auch frei halten/kannst ihn nicht einfach benutzen, weil ja auch der "seltene" worstcase Fall eintreten kann,
    das du tatsächlich alles brauchst.

    Wenn du tatsächlich immer weniger Speicher benutzen möchtest, musst du deine Frames effizienter ablegen.
    Also die 9*16 bit in weniger als 9*16bit speichern.
    Das klappt aber nur wenn sich Frames wiederholen.
    Als Ansatz würde ich da zu einer Shannon-Fano-Kodierung http://de.wikipedia.org/wiki/Shannon-Fano-Kodierung raten.
    Die Idee dabei ist das einige Symbole (für dich Frames) häufiger auftreten als andere.
    Deshalb bekommen die häufigstem Symbole die kürzesten Codes.
    z.B. ein Frame was einen Smilie enthält bekommt als Code 01.
    Die Codes sind dabei automatisch so gebaut, das in keinem anderen Code die Kombination 01 vorkommt.
    Also kann man die Codewörtern einfach hintereinander in den Speicher knallen 0111001... man brauch keine Trenner zwischen den Codewörtern.
    Irgendwo hast du dann eine Tabelle im Speicher die dir 01 zu einem bestimmten Frame zuordnet.
    Hier liegt halt leider auch der Haken bei 200 unterschiedlichen Frames nützt die das grade mal rein garnichts, weil deine Dekodierungstabelle genauso groß ist,
    weil die Animation (200 Frames).
    Da kann man aber immernoch überlegen ob es sich lohnt einzelne Teile (z.b. 16bit Scheiben) eines Frames so abzulegen.
    Weil wenn die Frames dann auch nur teilweise gleich sind kann man auch wieder Speicher sparen.

    Übrigens Shannon-Fano-Kodierung hat (wenn sie richtig benutzt wird) eine optimale Entropy (gibts einen schönen Beweis dazu) also benutzt es optimal wenig Bits für jedes Codewort.
    Falls du in die Richtung etwas implementieren willst, kann ich dir auch gerne den Trick verraten, wie man solche Kodierungen einfach mit einer Tabelle erzeugen kann (der steht nämlich nicht auf Wikipedia).

    Gruß
    Sebastian

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    06.06.2011
    Beiträge
    16
    Zitat Zitat von .:Sebastian:. Beitrag anzeigen
    Moin

    Beschreibe doch mal genauer was du ablegen willst.

    Ich vermute einfach mal :
    5 Animationen mit 200 Frames wobei jedes Frame 9 * 16bit (oder Pixel) hat.
    5 Animationen, von welchen die längste 200 Frames hat. Jeder Frame 9*16bit, genau.

    Jetzt ist die Frage ist das Array hardcoded (also schon zu Compilezeit fest) oder überträgst du es zu Laufzeit z.B. via UART zum uC ?
    Ich vermute mal letzteres weil wenn das Array konstant wäre, konnte man es ja einfach kleiner machen in dem man die unnötigen Frames weglässt.
    Das ganze ist schon zur Compilezeit fest und wird in den PROGMEM geschrieben. (read-only)

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    15.03.2011
    Ort
    Dresden
    Alter
    37
    Beiträge
    1.937
    Kannst du nicht für jede Animation ein eigenes Array mit der entsprechenden Framezahl erstellen?

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    06.06.2011
    Beiträge
    16
    Nein, weil die Anzahl der Animationen dynamisch ist.

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    .. ist schon zur Compilezeit fest und wird in den PROGMEM geschrieben
    ???
    Warum dann nochmal in den SRAM ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    06.06.2011
    Beiträge
    16
    Zitat Zitat von PicNick Beitrag anzeigen
    ???
    Warum dann nochmal in den SRAM ?
    Es kommt nicht nochmal in den SRAM, sondern NUR in den PROGMEM.

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    37
    Beiträge
    1.225
    Dann verstehe ich dein Problem nicht. Du kannst doch einfach mehrere Arrays mit genau der benötigten Länge im Flash ablegen und über Präprozessormakros, Konstanten oder sizeof (sollte auch gehen) auf die Länge des jeweiligen Arrays zugreifen. Wenn du ganz strukturiert rangehen willst, machst du dir eine Datenstruktur aus einem uint8 (Länge der Animation) + einem Pointer auf ein PROGMEM-Array und erzeugst ein Array aus solchen Strukturen, dann kannst du wieder über einen Index auf die jeweilige Animation zugreifen, erhältst die Länge + einen Zeiger auf die Animationsdaten und kannst all das Wissen dann zur Weiterverarbeitung der Daten nutzen.

    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

Ähnliche Themen

  1. LED Array
    Von filth im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 09.12.2008, 12:06
  2. Array
    Von infection im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 26.05.2008, 21:47
  3. Array auf zweidimensionale Array
    Von semicolon im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 25.05.2007, 12:48
  4. globales Array
    Von Baila_me im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 0
    Letzter Beitrag: 15.08.2006, 09:40
  5. Nur Nummern in Array / nur Variablentyp byte als Array?
    Von Crashmichl im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 27.04.2006, 23:15

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests