Sram

Sram ist das Objekt „Arbeitsspeicher“ der übergeordneten Klasse „Avr“.

Eigenschaften (nur lesen)
Name Beschreibung Rückgabe
.StartAddr oder .Addr Phys. Startadresse des nutzbaren Arbeitsspeichers. word
.EndAddr Phys. Endadresse des nutzbaren Arbeitsspeichers. word
.Length Anzahl Bytes des nutzbaren Arbeitsspeichers. word
.DynAddr Startadresse des dynamisch nutzbaren Arbeitsspeichers. word
.DynLength Anzahl Bytes des dynamischen Arbeitsspeichers. word
.Space Anzahl Bytes des unbenutzten dynamischen Arbeitsspeichers. word
Methoden (aufrufen)
Name Beschreibung
.ClearAll Physikalisch nutzbaren Arbeitsspeicher löschen (mit Nullbytes füllen).1)
.Dump Hexdumpausgabe des gesamten physikalisch nutzbaren Arbeitsspeichers auf erster serieller Schnittstelle. 2)
.DumpBlocks Hexdumpausgabe aller aktuell allozierten MemoryBlocks. 3)

Direktzugriff auf Sram

Der Direktzugriff auf den Arbeitsspeicher vergleichbar mit den Objekten Flash- oder EEprom. Durch diese Funktionen kann der Zugriff auf den Arbeitsspeicher „von Hand“ vorgenommen werden. D.h. man hat Zugriff vom Speicherbereich der Variablen bis hin zum Stack (der gesamte Arbeitsspeicher). Das Schreiben in den Arbeitsspeicher sollte daher nur dann erfolgen, wenn man MemoryBlock und Stringfunktionen von LunaAvr vermeidet, da diese den Speicher für ihre Dateninhalte selbst verwalten. Besitzt der Controller wenig Arbeitsspeicher, ist es unter Umständen notwendig den Speicher selbst zu verwalten. Wofür diese Funktionen implementiert sind.

Methoden (lesen und schreiben)
Name Beschreibung Rückgabetyp
.ByteValue(offset) Byte lesen/schreiben byte
.WordValue(offset) Word lesen/schreiben word
.IntegerValue(offset) Integer lesen/schreiben integer
.LongValue(offset) Long lesen/schreiben long
.SingleValue(offset) Single lesen/schreiben single
.StringValue(offset,bytes) String lesen/schreiben mit Längenvorgabe string
.PString(offset) Pascal-String lesen/schreiben (Start-Byte ist Länge) string
.CString(offset) C-String lesen/schreiben (Nullterminiert) string

Beispiel 1

print "Sram.startaddr: "+hex(Sram.startaddr)
print "Sram.endaddr: "+hex(Sram.endaddr)
print "Sram.length: "+str(Sram.length)
print "Sram.dynaddr: "+hex(Sram.dynaddr)
print "Sram.dynlength: "+str(Sram.dynlength)
print "Sram.space: "+str(Sram.space)
 
Sram.ClearAll  ' komplett löschen (mit Nullbytes füllen)

Beispiel 2:

avr.device = atmega32
avr.clock = 20000000         ' Quarzfrequenz
avr.stack = 32               ' Bytes Programmstack (Vorgabe: 16)
 
uart.baud = 19200            ' Baudrate
uart.Recv.enable             ' Senden aktivieren
uart.Send.enable             ' Empfangen aktivieren
 
dim a,b,i,j as byte
dim offset as word
dim s as string
 
print 12;"*********************************************"
print "* sram direct access"
print
 
a=&h11
b=&h22
s="hallo"
 
print
print "**** Sram dump from variable space to end of RAM ***"
print "sram.Addr      = 0x";hex(sram.Addr)
print "sram.StartAddr = 0x";hex(sram.StartAddr)
print "sram.EndAddr   = 0x";hex(sram.EndAddr)
print "sram.Length    = ";str(sram.Length)
print
 
offset = 0
do
  print "0x";hex(word(sram.Addr+offset));": ";
  for i=0 to 23
    when offset > sram.length do exit
    print hex(sram.ByteValue(offset));" ";
    incr offset
  next
  sub offset,24
  print "  ";
  for i=0 to 23
    when offset > sram.length do exit
    a=sram.ByteValue(offset)
    if a>31 then
      print a;
    else
      print ".";
    end if
    incr offset
  next
  print
loop until offset > sram.Length
 
do
loop
1) Inklusive Variablen, Objekte und Stack! Wird am absoluten Anfang jedes Programms automatisch vorgenommen.
2) , 3) Debugfunktion, benötigt zusätzlichen Speicherplatz im Flash.