- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 26

Thema: Array-Alternative

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    06.06.2011
    Beiträge
    16
    Frames einzeln ablegen würde ich ungern machen, da das dann sehr schnell unübersichtlich wird.
    Ginge es auch so, dass ich Animationen einzeln ablege?

    Edit:

    Ich habe jetzt folgendes:

    Code:
    typedef struct
    {
       uint16_t * PointerToFrame;   // Pointer zum FrameArray
    } Frame;
    
    
    uint16_t Frame1[5]={1,2,3,4,5};
    uint16_t Frame2[5]={1,2,3,4,5};
    
    Frame Animation1[2] = {Frame1,Frame2};
    Frame Animation2[2] = {Frame1,Frame2};
    
    typedef struct
    {
       Frame * PointerToFrame;   // Pointer zum FrameArray
    } AnimationStack;
    
    AnimationStack Animations[2] = { Animation1, Animation2};
    Funktioniert zwar, ist aber seehr suboptimal weil ich jeden Frame einzeln anlegen muss und nicht einfach {{1,2,3},{1,2,3}} nutzen kann. Gibt es irgendeine Möglichkeit das ich die Frames gleich als {{},{}} in eine Animation kriege?
    Geändert von Zulakis (02.01.2012 um 16:29 Uhr)

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    09.05.2007
    Beiträge
    99
    Schade, dass Du Deinen letzten Weg (ver-)editiert hast. Darauf aufbauend wäre das meine Vorschlag:

    Code:
    typedef uint16_t Frame[9];
    typedef struct
    {
    uint16_t NumberOfFrames; // Anzahl der Frames
    Frame * PointerToAnimation; // Pointer zum FrameArray
    } Animationen;
    
    uint16_t Animation1[][9]={{0,2,3,4,5,6,7,8,9}, {1,2,3,4,5,6,7,8,9}};
    uint16_t Animation2[][9]={{3,2,3,4,5,6,7,8,9}};
    
    Animationen Animations[2] = {{2, &Animation1}, {1, &Animation2}};
    

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    06.06.2011
    Beiträge
    16
    Zitat Zitat von rossir Beitrag anzeigen
    Schade, dass Du Deinen letzten Weg (ver-)editiert hast. Darauf aufbauend wäre das meine Vorschlag:
    Ahh, verdammt

    Ich bekomme bei deinem Vorschlag leider folgende Fehler:

    Code:
    cmd:30: error: cannot convert 'uint16_t (*)[2][9]' to 'uint16_t (*)[9]' in initialization
    cmd:30: error: cannot convert 'uint16_t (*)[1][9]' to 'uint16_t (*)[9]' in initialization
    Sieht ansonsten aber genau nach dem aus was ich versuche hinzukriegen!

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    09.05.2007
    Beiträge
    99
    Schade.

    Vielleicht müssen wir mal Compilerversionen austauschen. Zunächst, bei mir liegt der Code in einer C-Datei (nicht C++-Datei).
    1) Microsoft Visual C++ 2005.
    2) WinAVR-20100110

    a) bei mir funktioniert es mit beiden oben genannten Compilern.
    b) auch folgende Variante funktioniert damit:

    Code:
    uint16_t Animation1[2][9]={{0,2,3,4,5,6,7,8,9}, {1,2,3,4,5,6,7,8,9}};
    uint16_t Animation2[1][9]={{3,2,3,4,5,6,7,8,9}};
    
    Animationen Animations[2] = {{2, Animation1}, {1, Animation2}};
    

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    06.06.2011
    Beiträge
    16
    Hmm, ich benutze das Standard Arduino-IDE (http://www.arduino.cc/en/Main/Software), welches laut http://www.arduino.cc/en/Hacking/BuildProcess mit dem avr-gcc compiled.

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    37
    Beiträge
    1.225
    Ja drew, so war das gemeint. Folgender Code ist ungetestet, compiliert bei mir aber schon Mal:

    Code:
    #include <avr/io.h>
    #include <avr/pgmspace.h>
    #include <stdint.h>
    
    typedef uint16_t Frame_t[9];
    typedef struct {
        uint8_t frameCount;
        Frame_t * animation;
    } AnimationData_t;
    PROGMEM Frame_t Animation1[2] = { { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, { 11, 12, 13,
            14, 15, 16, 17, 18, 19 } };
    PROGMEM Frame_t Animation2[1] = { { 21, 22, 23, 24, 25, 26, 27, 28, 29 } };
    
    AnimationData_t animations[2] = { { sizeof(Animation1), Animation1 }, {
            sizeof(Animation2), Animation2 } };
    
    int main(void) {
        for (uint8_t i = 0; i < sizeof(animations); i++) {
            for (uint8_t j = 0; j < animations[i].frameCount; j++) {
                Frame_t * frames = animations[i].animation;
                for (uint8_t k = 0; k < 9; k++) {
                    uint16_t frameWord;
    
                    frameWord = pgm_read_word(&frames[j][k]);
                }
            }
        }
    }
    Später kann über animations zur Laufzeit fast wie auf ein Array zugegriffen werden, dieser Code legt die eigentlichen Bitmuster bereits im Flash ab.

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

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    06.06.2011
    Beiträge
    16
    Danke, deine Lösung macht genau was ich gesucht habe

Ä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
  •  

LiFePO4 Speicher Test