- 12V Akku mit 280 Ah bauen         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 26

Thema: Array-Alternative

  1. #11
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Anzeige

    LiFePo4 Akku selber bauen - Video
    .. 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.

  2. #12
    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.

  3. #13
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    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

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    06.06.2011
    Beiträge
    16
    Zitat Zitat von markusj Beitrag anzeigen
    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
    Ich verstehe leider nicht wirklich was du meinst, bin relativ C-unerfahren. Meinst du sowas?

    uint16_t t2[2][9] = {{0,864,2032,2032,992,448,128,0},{1,2,3,4,5,6,7,8, 8}};
    uint16_t t1[] = {t2};

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied Avatar von drew
    Registriert seit
    06.04.2005
    Beiträge
    160
    Hi,
    wie wäre es, wenn Du das ganze Stück für Stück aufbaust?

    Erst brauchst Du eine Struktur in der steht wieviele Frames die Animation hat und einen Zeiger auf die Frames:
    Code:
    typedef struct
    {
       uint16_t NumberOfFrames;     // Anzahl der Frames
       uint16_t * PointerToFrame;   // Pointer zum FrameArray
    } Frame;
    Wenn Du die Frames einzeln ablegst:
    Code:
    uint16_t Frame1[20]={1,2,3,4,5,...};
    uint16_t Frame2[100]={1,2,3,4,5,...};
    ...
    und jetzt so was anlegest:
    Code:
    Frame MeineFrames[5] = {{20,Frame1},{100,Frame2},...};
    solltest Du über MeineFrames auf alles zugreifen, was Du brauchst.

    Ich hoffe, dass ich nicht all zu wirr klinge...

    Drew

    Ps: Ich glaube das ist das was markusj meint, oder?


  6. #16
    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)

  7. #17
    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}};
    

  8. #18
    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!

  9. #19
    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}};
    

  10. #20
    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.

Seite 2 von 3 ErsteErste 123 LetzteLetzte

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

12V Akku bauen