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 !
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!
Code:'************************************************************ '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
Viel Spaß im Forum
MfG Peter
Rechtschreibfehler sind geistiges Eigentum des Verfassers.... wer sie findet darf sie aber behalten
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 !
Hallo HPM!Zitat von 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.
mfgCode:$hwstack = 20 $swstack = 20 $framesize = 0
Gerold
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!
Code:'************************************************************ '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
Viel Spaß im Forum
MfG Peter
Rechtschreibfehler sind geistiges Eigentum des Verfassers.... wer sie findet darf sie aber behalten
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:
Welche Einstellungen für dich OK sind, hängt von deinem Programm ab.Code:$hwstack = 8 $swstack = 2 $framesize = 5
mfg
Gerold
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!!
Viel Spaß im Forum
MfG Peter
Rechtschreibfehler sind geistiges Eigentum des Verfassers.... wer sie findet darf sie aber behalten
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.
Lesezeichen