Speicherplatzbedarf des Programms

Gast #3471734
Lesenswert?

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 #3471745
Lesenswert?

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.
#3471753
Lesenswert?

@ 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 #3471755
Lesenswert?

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..
Gast #3471771
Lesenswert?

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 #3471866
Lesenswert?

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'
#3471878
Lesenswert?

@ 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 #3471892
Lesenswert?

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 #3471903
Lesenswert?

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 #3471904
Lesenswert?

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 #3471923
Lesenswert?

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 #3472334
Lesenswert?

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.
#3472477
Lesenswert?

@ 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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren