PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Variablen in XRAM oder ERAM (ATTiny13) ???



HPM
29.12.2007, 20:26
Hallo Forumler,

ich hatte mal gelesen, wenn man Variablen in den verkehrten Speicher schreibt gibt der Controller irgend wann den "Geist" auf!

Ich will eine Variable ziehmlich oft schreiben und abfragen
Der Tiny13 bringt mir ne Fehlermeldung, dass der SRAM nicht reicht wenn ich die Variable als Byte schreibe.
Er bietet mir aber "XRAM Byte" und "ERAM Byte" an!
Welches muss ich denn nun nehmen??

Danke, für Eure Hilfe im Voraus!






'************************************************* ***********
'Voreinstellungen

$regfile = "ATtiny13.DAT" ' Definitionen für ATtiny13
Config Portb = Output ' alles Ausgänge
Portb = 1 ' Pullup setzen um Ausgang beim Einschalten auf 0 zu halten

Dim I As Xram Byte
'Dim I As ERAM Byte

linux_80
29.12.2007, 20:34
Hallo,

XRAM hat der T13 nicht,
ERAM hat er 64Byte genausoviel wie SRAM.

Mit ERAM variablen kann man aber nicht direkt arbeiten, die muss man immer erst in eine normale Variable kopieren um damit zu rechnen, zu vergleichen oder sonst was !

python_rocks
29.12.2007, 20:40
Er bietet mir aber "XRAM Byte" und "ERAM Byte" an!
[...]

Dim I As Xram Byte
'Dim I As ERAM Byte
Hallo HPM!

Wenn du ERAM nimmst, dann wird die Variable in den EEPROM geschrieben und bei jedem Verwenden aus dem EEPROM ausgelesen. Das ist genau das was man sehr selten machen sollte. Am Anfang des Programms oder um Einstellungen zu speichern.

Ich hatte heute auch das Problem, dass mir Bascom für den ATtiny13 zu wenig Speicher meldete. Darauf hin habe ich ein wenig an den Einstellungen gedreht um den Speicher ein wenig umzuräumen.

Du kannst mit ``$hwstack``, ``$swstack`` und ``$framesize`` spielen. Ich habe bei meinem Programm diese Einstellungen verwendet. Allerdings muss ich jetzt noch mal nachlesen, was für was zuständig ist und ob ich damit keinen Blödsinn gemacht habe. Damit lässt sich das Programm zumindest wieder kompilieren.

$hwstack = 20
$swstack = 20
$framesize = 0

mfg
Gerold
:-)

HPM
29.12.2007, 20:43
Uiiii.... das ging aber schnell !!!
Danke, für die fixe Antwort!

Ich dachte ja auch, das der Tiny13 keinen XRAM hat aber sowohl bei
DIM..XRAM als auch DIM..ERAM wird die Variable abgearbeitet!

Habe mal ein kleines Lauflicht zur Probe gebastelt!

Wo werden dann also die Daten abgelegt ???
Ich wollte nur den Speicher, der nicht so oft beschrieben werden soll, schonen!



'************************************************* ***********
'Voreinstellungen

$regfile = "ATtiny13.DAT" ' Definitionen für ATtiny13
Config Portb = Output ' alles Ausgänge
Portb = 1 ' Pullup setzen um Ausgang beim Einschalten auf 0 zu halten

Dim I As Xram Byte
'Dim I As ERAM Byte
'************************************************* ***********

'************************************************* ***********
'Hauptprogramm

Do
Gosub Vor
Gosub Rueck
Gosub Aufl
Loop
End
'************************************************* ***********


'************************************************* ***********
'Unterprogramme



'************************************************* ***********
Vor:
For I = 1 To 50
Portb.0 = 0
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Waitms 30

Portb.0 = 1
Portb.1 = 0
Portb.2 = 1
Portb.3 = 1
Waitms 30

Portb.0 = 1
Portb.1 = 1
Portb.2 = 0
Portb.3 = 1
Waitms 30

Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
Portb.3 = 0
Waitms 30
Next I
Return


'************************************************* ***********
Rueck:
For I = 1 To 50
Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
Portb.3 = 0
Waitms 30

Portb.0 = 1
Portb.1 = 1
Portb.2 = 0
Portb.3 = 1
Waitms 30

Portb.0 = 1
Portb.1 = 0
Portb.2 = 1
Portb.3 = 1
Waitms 30

Portb.0 = 0
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Waitms 30
Next I
Return

'************************************************* ***********
Aufl:
For I = 1 To 100
Portb.0 = 0
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Waitms 30

Portb.0 = 0
Portb.1 = 0
Portb.2 = 1
Portb.3 = 1
Waitms 30

Portb.0 = 0
Portb.1 = 0
Portb.2 = 0
Portb.3 = 1
Waitms 30

Portb.0 = 0
Portb.1 = 0
Portb.2 = 0
Portb.3 = 0
Waitms 30

Portb.0 = 1
Portb.1 = 0
Portb.2 = 0
Portb.3 = 0
Waitms 30

Portb.0 = 1
Portb.1 = 1
Portb.2 = 0
Portb.3 = 0
Waitms 30

Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
Portb.3 = 0
Waitms 30

Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Waitms 30
Next I
Return


'************************************************* ***********
'Ende

python_rocks
29.12.2007, 20:57
Hallo HPM!

Nachdem ich mich ein wenig schlauer gemacht habe http://avrhelp.mcselec.com/index.html?memory_usage.htm verwende ich bei mir jetzt diese Einstellungen:

$hwstack = 8
$swstack = 2
$framesize = 5
Welche Einstellungen für dich OK sind, hängt von deinem Programm ab.

mfg
Gerold
:-)

HPM
31.12.2007, 13:16
Hallo Gerold,
das war ein guter Tipp!!!
MeinProg läuft mit den Einstellungen, die Du verwendet hast!

Vielen Dank noch mal und einen guten Rutsch!!

stefan_Z
31.12.2007, 13:27
Dimensioniere die Variablen einfach ohne alles, das funktioniert schon ;-)
EEP-Variablen nimmt man für permanente Parameter, also Werte die man z.B. von außen setzt und die dann beim Reset aufgerufen werden. Der EEP kann laut Atmel 10.000x geschrieben und 100.000x gelesen werden, bevor er statistisch gesehen den Geist aufgibt (bzw. erste Fehler auftreten.). Es kann sicherlich sein, dass man den auch 1 Mio. mal schreiben/lesen kann, aber da darf man sich nicht drauf verlassen. Auf jeden Fall macht es keinen Sinn, normale Variablen darin zu speichern, vor allem weil man sie ja eh nur über eine Hilfsvariable auslesen kann - wäre also keine Resourceneinsparung.
XRAM ist eine "Speichererweiterung" für die µC, das braucht man eher kaum.