Reicht Speicher des Atmegas?

Gast #3121291
Lesenswert?

Hey,

ich möchte, dass mein Atmega324p-Controller 200 16bit Sensorwerte 
abfragt, auf dem Controller zwischenspeichert und später an meinen 
Messrechner überträgt. Nun überlege ich, ob mein Speicher im Atmega 
dafür noch reicht.

Laut AVR Studio sind es ohne die Zwischenspeicherung
Program:    2194 bytes (6.7% Full)
Data:         15 bytes (0.7% Full)

Nun kommen 200*16/8= 400Byte bei DATA dazu, laut Datenblatt habe ich 2k 
internal SRAM.

Also kann ich es so machen...

Ist die Überlegung richtig?

Vielen Dank
Gast #3121314
Lesenswert?

Hi
Na, ich glaube nicht, das der Stack in die Region der Werte rutscht... 
immerhin sind da noch 2048- 415 = 1633 Bytes frei. Aber, wenn du doch 
schon die Datas kennst, warum definierst du nicht einfach ein 
entsprechend großes Array und schaust dir dann die Auslastung an ?
Inn ASM
Mess_Daten:  .Byte 400
Dürftest dann so ca. 20 % Speicherbelegung bekommen....
Und das ohne dein Programm zu kennen, denn bekann ist ja bereits, das 15 
Byte Data belegt sind.
Gruß oldmax
Gast #3121492
Lesenswert?

oldmax schrieb:
> Aber, wenn du doch
> schon die Datas kennst, warum definierst du nicht einfach ein
> entsprechend großes Array und schaust dir dann die Auslastung an ?

Das wollte ich, ich habe ein entsprechendes Array erzeugt und die 
Variablen in einer Schleife mit der gleichen Zahl beschrieben. 
Allerdings ändert sich an meiner Programmspeicherauslastung nach dem 
Compilieren nichts. Ich denke, dass der Compiler das Array wegoptimiert.
Gast #3121511
Lesenswert?

Stefan Ernst schrieb:
> Wahrscheinlicher ist, dass du es als lokale Variable angelegt hast.

Habe ich auch, ich will das Ding ja später auch mit meinen Messwerten 
füttern

Der Code in der main-Schleife
1
volatile int16_t VarADtemp[200];  
2

3
while(1)
4
{
5

6
  for(int k=0;k<200;k++)
7
  {
8
        
9
    VarADtemp[k]=k;
10
  }
Gast #3121544
Lesenswert?

cyblord ---- schrieb:

> Mach das Ding GLOBAL.

Das wäre einen Versuch wert. Volatile soll der Compiler normalerweise 
auch nicht weg optimieren, zumindest wenn so eine Variable auch noch in 
einem Interrupt bzw. anderer Stelle gebraucht wird. Dann müßte sie aber 
auch an einer anderen Stelle definiert werden, wie Global. Vielleicht 
ist er aber schlau, und bemerkt, das Volatile hier keinen tieferen Sinn 
macht.

Da hilft es manchmal nur, die Assembler-Listings mal anzuschauen, was da 
wirklich gemacht wird.

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