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