Speicherplatzbedarf des Programms

Gast
Peter II schrieb:
> kommt denn am ende keine Ausgabe vom Buildprocess?

Hm. Da hätt ich jetzt auch selber drauf kommen können. Aber vllt hat 
sich gerade eine ander Problematik aufgetan.

ich programmiere einen Atmega644, der nur für die Anzeige von Inhalten 
eines sehr, sehr dummen Grafikdisplays da ist. Den ganzen Schriftsatz 
usw habe ich in den Speicher des µC schreiben müssen. Dass der recht 
voll wird habe ich mir gedacht, und nun lese ich in der built-Ausgabe 
folgendes:

Device: atmega644p
    Program:    4808 bytes (7.3% Full)
    Data:       4282 bytes (104.5% Full)

Datenspeicher mehr als 100% voll? Kann man das ignorieren?
Gast
wenn mich jetzt nicht irre, dann ist der RAM das Problem

Data:       4282 bytes (104.5% Full)


das müsste der Ramverbraucht sein, da hilft auch keine Optimierung. 
Jetzt musst du uns wohl doch mal das Programm zeigen.
@ Stephan (Gast)

>eines sehr, sehr dummen Grafikdisplays da ist. Den ganzen Schriftsatz
>usw habe ich in den Speicher des µC schreiben müssen.

Ja, in den RAM. Im Flash ist er besser aufgehoben.

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29

>    Program:    4808 bytes (7.3% Full)
>    Data:       4282 bytes (104.5% Full)

>Datenspeicher mehr als 100% voll? Kann man das ignorieren?

Der RAM.
Gast
Peter II schrieb:
> Jetzt musst du uns wohl doch mal das Programm zeigen.

Gern: Hier die Zahlen von 0 bis 9, wie sie das Lascar- Display 
(32x100px) gerne hätte (und bekommt):
1
  static const unsigned char dmx_digit[10][100] = {
2
  {0x00,0x00,0x00,0x80,0xE0,0xF0,0xF8,0x7C,0x1C,0x1E,0x0E,0x0E,0x0E,0x0E,0x1E,0x1E,0x7C,0xFC,0xF8,0xF0,0xC0,0x00,0x00,0x00,0x00,
3
  0x00,0x00,0xFC,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,
4
  0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,
5
  0x00,0x00,0x00,0x03,0x0F,0x1F,0x3F,0x3E,0x78,0x78,0x70,0x70,0x70,0x70,0x78,0x38,0x3E,0x1F,0x0F,0x07,0x01,0x00,0x00,0x00,0x00},
6
  
7
  {0x00,0x00,0x00,0x00,0xE0,0xE0,0x70,0x70,0x38,0x3C,0x1C,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
8
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
9
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
10
  0x00,0x00,0x00,0x00,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x7F,0x7F,0x7F,0x7F,0x70,0x70,0x70,0x70,0x70,0x70,0x00,0x00,0x00,0x00},
11
  
12
  {0x00,0x00,0x00,0x00,0x70,0x78,0x3C,0x1C,0x1C,0x0E,0x0E,0x0E,0x0E,0x0E,0x1E,0x1E,0x7C,0xFC,0xF8,0xF0,0xC0,0x00,0x00,0x00,0x00,
13
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0xFF,0xFF,0x7F,0x1F,0x00,0x00,0x00,0x00,
14
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0x78,0x3C,0x1F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
15
  0x00,0x00,0x00,0x70,0x78,0x7C,0x7E,0x7F,0x77,0x73,0x71,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x00,0x00,0x00},
16
  
17
  {0x00,0x00,0x00,0x00,0x70,0x78,0x3C,0x1C,0x1C,0x0E,0x0E,0x0E,0x0E,0x0E,0x1E,0x1E,0x3C,0xFC,0xF8,0xF0,0xE0,0x00,0x00,0x00,0x00,
18
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xE0,0xF0,0xF8,0x3F,0x3F,0x1F,0x07,0x00,0x00,0x00,0x00,
19
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x03,0x07,0x0F,0xFF,0xFE,0xFC,0xF0,0x00,0x00,0x00,
20
  0x00,0x00,0x00,0x1C,0x3C,0x38,0x38,0x78,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x38,0x3C,0x3E,0x1F,0x0F,0x07,0x01,0x00,0x00,0x00},
21
  
22
  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0xFC,0x7E,0x1E,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,
23
  0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0xFC,0x7E,0x1F,0x0F,0x03,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
24
  0x00,0xF0,0xF8,0xFE,0xFF,0xEF,0xE3,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xFF,0xFF,0xFF,0xFF,0xE0,0xE0,0xE0,0xE0,0x00,0x00,
25
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00,0x00},
26
  
27
  {0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x00,0x00,0x00,0x00,0x00,
28
  0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,
29
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x07,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,
30
  0x00,0x00,0x00,0x1C,0x3C,0x38,0x38,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x78,0x38,0x3C,0x1F,0x1F,0x0F,0x07,0x01,0x00,0x00,0x00},
31
  
32
  {0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF0,0xF8,0x7C,0x3C,0x1C,0x1E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x1E,0x1C,0x1C,0x00,0x00,0x00,
33
  0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0x87,0xC0,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,
34
  0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0x83,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x07,0xFF,0xFF,0xFF,0xFC,0x00,0x00,
35
  0x00,0x00,0x00,0x00,0x03,0x0F,0x1F,0x3F,0x3C,0x78,0x70,0x70,0x70,0x70,0x70,0x70,0x38,0x3C,0x3F,0x1F,0x0F,0x07,0x01,0x00,0x00},
36
  
37
  {0x00,0x00,0x00,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0xCE,0xFE,0xFE,0xFE,0x7E,0x1E,0x00,0x00,
38
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0xFE,0xFF,0x3F,0x0F,0x01,0x00,0x00,0x00,0x00,
39
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xFC,0xFF,0x7F,0x1F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
40
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x7C,0x7F,0x7F,0x3F,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
41
  
42
  {0x00,0x00,0x00,0xC0,0xF0,0xF8,0xFC,0x3C,0x1E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x1E,0x3C,0xFC,0xF8,0xF0,0xE0,0x00,0x00,0x00,0x00,
43
  0x00,0x00,0x00,0x07,0x1F,0x3F,0x3F,0x7C,0xF8,0xF0,0xE0,0xE0,0xC0,0xE0,0xF0,0xF0,0x7C,0x3F,0x1F,0x0F,0x03,0x00,0x00,0x00,0x00,
44
  0x00,0x00,0xE0,0xF8,0xFC,0xFC,0x1E,0x0F,0x07,0x03,0x03,0x01,0x03,0x03,0x07,0x07,0x0F,0x1E,0xFE,0xFC,0xF8,0xE0,0x00,0x00,0x00,
45
  0x00,0x00,0x03,0x0F,0x1F,0x3F,0x3C,0x38,0x78,0x70,0x70,0x70,0x70,0x70,0x70,0x78,0x38,0x3C,0x3F,0x1F,0x0F,0x03,0x00,0x00,0x00},
46
  
47
  {0x00,0x00,0x80,0xE0,0xF0,0xF8,0x7C,0x3C,0x1E,0x0E,0x0E,0x0E,0x0E,0x0E,0x1E,0x1E,0x3C,0xFC,0xF8,0xF0,0xC0,0x00,0x00,0x00,0x00,
48
  0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC1,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,
49
  0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0xE1,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,
50
  0x00,0x00,0x00,0x38,0x38,0x78,0x70,0x70,0x70,0x70,0x70,0x70,0x78,0x38,0x3C,0x3E,0x1F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00}
51
  };

Ich denke, da ist nicht viel mit Einsparen..
@ Stephan (Gast)

>> Ja, in den RAM. Im Flash ist er besser aufgehoben.

>Landen Variable, die man verwendet, automatisch im RAM?

Wo sonst, es sind ja VARIABLEN. Siehe Speicher.
Auch ein const allein nützt hier nix.

Wie es geht steht oben im Link. Ist nicht schwer.
Gast
Peter II schrieb:
> doch, das zeug muss nicht im Ram liegen - das legt man in den Flash.

Bernd schrieb:
> Eventuell kann man das eine oder andere Byte in den EEProm oder Flash
> verlegen.

Falk Brunner schrieb:
> Im Flash ist er besser aufgehoben.


Scheinbar ist man sich hier einig... ich werd mich wohl mal ans Tutorial 
setzen und ein bissel Flash-zugriff lernen.

Danke vielmals!

OT: Biertipp: Neumarkter Lammsbräu Edelpils.
Gast
So. Es hakt.

Im Tutorial heißt es
"GCC kennt keine eigene Option zum Aktivieren von Embedded-C, es wird 
als GNU-C Erweiterung behandelt. Daher müssen C-Module, die 
Address-Spaces verwenden, mit -std=gnu99 compiliert werden."
Soweit so gut.

Compilieren tut mein AVRStudio immer, wenn ich F5 drücke. Wie bringe ich 
ihm bei, dass er da "-std=gnu99" einbaut?

Auf die Codezeile
1
static const __flash int value = 10;

antwortet er mit der Fehlermeldung

expected '=', ',', ';', 'asm' or '__attribute__' before 'int'
@ Stephan (Gast)

>"GCC kennt keine eigene Option zum Aktivieren von Embedded-C, es wird
>als GNU-C Erweiterung behandelt. Daher müssen C-Module, die
>Address-Spaces verwenden, mit -std=gnu99 compiliert werden."
>Soweit so gut.

Irgendwie ist der Abschnitt ziemlich unübersichlich geworden.

>static const __flash int value = 10;

Mach es einfach mit PROGMEM und gut.
1
#include <avr/pgmspace.h>
2

3
static const unsigned char dmx_digit[10][100] PROGMEM = {
4

5
   i= pgm_read_byte(&dmx_digit[x][y]);
Gast
Stephan schrieb:
>> welche Version von GCC hast du?
>
> Wenn ich bei den Infos zum AVRStudio nach den installierten Packages
> schaue und GCC Project auswähle, steht da 5.1.0.0. Ist das die Angabe
> die Du brauchst?

nein, du musst direkt den gcc (avr-gcc oder so) auf der Kommandozeile 
mit dem Parameter --Version startet.

Denn das mit dem Flash geht erst ab 4.7.
Gast
Peter II schrieb:
> nein, du musst direkt den gcc (avr-gcc oder so) auf der Kommandozeile
> mit dem Parameter --Version startet.

Ich hantiere schon ziemlich lange mit AVRs aber habe die Kommandozeile 
nicht ein einziges mal gebraucht (geschweigedenn vermisst). Mit den 
AVRStudio war alles immer so vorgekaut! Aber ich versuchs. Nur, wie zum 
Henker finde ich diese Kommandozeile bzw wie nennt Atmel die?
Gast
Stephan schrieb:
> Ich hantiere schon ziemlich lange mit AVRs aber habe die Kommandozeile
> nicht ein einziges mal gebraucht (geschweigedenn vermisst). Mit den
> AVRStudio war alles immer so vorgekaut! Aber ich versuchs. Nur, wie zum
> Henker finde ich diese Kommandozeile bzw wie nennt Atmel die?

die Windows Kommandozeile (cmd)
Gast
Stephan schrieb:
> Ich bin mit Windows 95 groß geworden. Ich habe NULL Plan was ich tippen
> soll um die Version vom AVR-GCC herauszufinden. Da steht nur
> C_USER_STEPHAN

dann solltest du eventuell dir ein anderes Hobby/Beruf suchen. Als 
Programmierer sollte man gewisse Grundlagen kennen.
Gast
Peter II schrieb:
> dann solltest du eventuell dir ein anderes Hobby/Beruf suchen. Als
> Programmierer sollte man gewisse Grundlagen kennen.

Das kann schon sein. Asche auf mein Haupt! Ich habe nie beklagt, dass 
AVRStudio so viel selber macht. Getreu dem Motto "keine schlafenden 
Hunde wecken".
Wenn ich das mir beibrächte wäre das, als hätte man Boris Becker was 
über Impulserhaltung erklärt- am nächsten Tag ists wieder vergessen :)
Gast
Stephan schrieb:
> 3.3.1.27

Das könnte die Version der Toolchain sein.

Einfach mal im Atmel-Studio auf Help/About Atmel Studio gehen
und da im Fenster die "View Installed Components" auf "Atmel AVR (8 bit) 
GNU Toolchain" verstellen.

Bei mir steht dann das hier im Fenster:

Installed Packages: Atmel AVR (8 bit) GNU Toolchain - 3.4.3.1005
AVR Toolchain 8 Bit
Version: AVR8_Toolchain_Version:3.4.3.1072 GCC_VERSION:4.8.1
Package GUID: 2C7AA7CF-94C6-463C-81DA-4AA03B613C3B
Company: Atmel
HelpUrl:
Release Description: AVR Toolchain For 8-Bit Devices

Per Kommando-Zeile habe ich für AVR auch schon lange nichts mehr 
gemacht.
@ Henry (Gast)

>Und Stephan, läufts jetzt mit __flash?

>Also ich finde dieses Vorgehen viel einfacher und auch besser lesbar als
>die veraltete PROGMEM-Krücke...

Naja, man darf aber bitte nicht vergessen, dass es nur Kosmetik ist. Die 
Unterscheidung zwischen FLASH und RAM Variablen bleibt, es sieht nur 
schöner aus. Mit dieser __memx Trick macvht das FAST perfekt, aber 
soweit ich es verstehe auch nicht 100% wie bei normalem C.

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Jenseits_von_flash

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.