- LiTime Speicher und Akkus         
Ergebnis 1 bis 6 von 6

Thema: Max Arraygröße bzw Grenzen des Atmega

  1. #1
    Unregistriert
    Gast

    Max Arraygröße bzw Grenzen des Atmega

    Anzeige

    Powerstation Test
    Hallo zusammen,

    als Speicher gibt es ja den Flash (für das Programm), EPROM und RAM (Variablen?).

    Wie groß kann ein Array vom Typ INT maximal sein bei dem Atmega 2560:
    Flash: 256 kB
    EPROM: 4 kB
    RAM: 8 kB

    Theoretisch sollten es doch [4000] stllen haben dürfen, bei 8kB Ram, da INT ja 2Byte groß ist oder?


    Danke schonmal vorab

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.651
    .. Theoretisch sollten es doch [4000] stllen haben dürfen, bei 8kB Ram, da INT ja 2Byte groß ist oder? ..
    4000 STELLEN ?? Also bei mir hat ein Byte als dekadische Ziffer schon mal bis zu drei Stellen. Rund 4000 Bytes wäre richtiger. Das ist ein theoretischer Wert, weil das als Nur-Speicher ja davon ausgehen müsste, dass ein evtl. vorhandenes Programm keinen dynamischen Speicher belegt. Und letzteres kommt ja äusserst selten vor :-/

    Ich habe z.B. schon Felder der Art MEIN-QFELD [25][25] untergebracht. Da ist es ziemlich praktisch beim Kompilieren im AVRStudio (mein Standard) die aktuelle Speichernutzung byte- und prozentmässig aufgelistet zu bekommen.
    Code:
    Build started 22.10.2015 at 09:28:40
    avr-gcc -I"D:\D_pro-fils\compu_MC\C5_Ronny-5_etc\MoCo4\..\..
    ...
    avr-objdump -h -S MoCo4.elf > MoCo4.lss
    
    AVR Memory Usage
    ----------------
    Device: atmega1284p
    
    Program:   17912 bytes (13.7% Full)
    (.text + .data + .bootloader)
    
    Data:       2434 bytes (14.9% Full)
    (.data + .bss + .noinit)
    
    
    Build succeeded with 0 Warnings...
    Geändert von oberallgeier (22.10.2015 um 09:31 Uhr) Grund: Beispiel für mega1284
    Ciao sagt der JoeamBerg

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von oberallgeier Beitrag anzeigen
    4000 STELLEN ?? Also bei mir hat ein Byte als dekadische Ziffer schon mal bis zu drei Stellen. Rund 4000 Bytes wäre richtiger.
    Nö, 4000 Elemente wäre richtiger (übrigens 8000 Byte in diesem Fall).


    Zitat Zitat von oberallgeier Beitrag anzeigen
    Das ist ein theoretischer Wert, weil das als Nur-Speicher ja davon ausgehen müsste, dass ein evtl. vorhandenes Programm keinen dynamischen Speicher belegt.
    Nö, es wären ja noch 192 Bytes frei.
    MfG
    Stefan

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von Unregistriert Beitrag anzeigen
    Hallo zusammen,

    als Speicher gibt es ja den Flash (für das Programm), EPROM und RAM (Variablen?).

    Wie groß kann ein Array vom Typ INT maximal sein bei dem Atmega 2560:
    Flash: 256 kB
    EPROM: 4 kB
    RAM: 8 kB
    Hier gehts ja wohl um C. Da kann das EEPROM außen vor bleiben, da C soetwas nicht kennt (das wird eher wie ein externer Massenspeicher angesprochen). Das Flash ist für Code und konstante Daten. Bleiben also die 8k RAM. Dort müssen alle Variable, globale und lokale, sowie der Stack hineinpassen. Je nach Programmgröße und Programmierstil sollte man für Stack und lokale Variable 25% bis 50% reservieren. Dann bleiben noch 4k. Ein int in C ist mindestens 16 Bit, also 2 Byte groß. Es ist also Platz für rund 2000 ints. Sind ints 32 Bit werdens nur 1000.

    Man muß aber immer aufpassen, daß einem der Stack nicht in die Variablen läuft.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    21.02.2015
    Beiträge
    65
    @Klebwax: genau das habe ich gemeint. So war auch mein Ansatz, außer das ich das mit den 25% bzw 50% nicht wusste.

    Danke

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    66
    Beiträge
    2.435
    Hallo,
    Zitat Zitat von xrzr Beitrag anzeigen
    @Klebwax: genau das habe ich gemeint. So war auch mein Ansatz, außer das ich das mit den 25% bzw 50% nicht wusste.
    Sorry, aber so eine absolute %Angabe ist Humbug.
    Wenn ich ein Programm auf einem Chip mit 2K Ram entwickle und dann auf einem identischen Chip mit 8K laufen lassen vierteln sich die Prozente, weil sich sonst rein gar nichts ändert.

    Die Stackgrösse ist tatsächlich nicht einfach abzuschätzen, denn sie hängt von vielem ab.
    Rein von der Hardware her, braucht jeder Interrupt etwas Stack um die Register zu retten. Hier muss man beachten wie viele Interrupts maximal verschachtelt sein können.
    Beim eigentlichen C-Programm kommt dann für jeden Funktionsaufruf Platz für die Parameter der aufgerufenen Funktion, zu rettende Register und lokale automatische Variablen hinzu. Auch hier muss man an die Schachtelung denken. Hier kommt dann auch der Programmierstil hinzu. Es macht einen grossen Unterschied ob ich in einer Funktion lokal 100 Byte für einen Buffer anlege oder nur einen Zeiger auf einen globalen Buffer übergebe.

    Aufpassen muss man auch immer mit den verwendeten Bibliotheken, die benötigen auch Platz auf dem Stack, es ist aber nicht immer einfach, heraus zu bekommen wie viel.

    Vor 20 Jahren hatten viele Controller nur 128 oder 256 Byte RAM und diese konnte man auch schon gut mit C programmieren.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

Ähnliche Themen

  1. RoboSchool: Wer möchte mit Technik Grenzen überwinden?
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 08.07.2013, 15:20
  2. Grenzen des Asuro
    Von ehenkes im Forum Asuro
    Antworten: 7
    Letzter Beitrag: 13.05.2007, 17:54
  3. Probleme bei Flashzugriff - max Arraygröße?
    Von navyseal im Forum C - Programmierung (GCC u.a.)
    Antworten: 9
    Letzter Beitrag: 29.12.2005, 11:57
  4. Grenzen des Robby schnell erreicht.
    Von MesoBoB im Forum Robby CCRP5
    Antworten: 11
    Letzter Beitrag: 03.02.2005, 18:31
  5. Grenzen zwischen Körper und Technik
    Von Frank im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 2
    Letzter Beitrag: 07.04.2004, 11:35

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

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

LiFePO4 Speicher Test