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