bin am verzweifeln mit out of sram space
letzte Woche lief mit der 1.11.9.3 noch alles 1a, auf einen Schlag kam immer die Fehlermeldung Out of SRAM space [Error 22 Line 11]
Ich habe jetzt schon zig Einstellungen getestet nichts geht.
In der 1.11.9.1 gehts momemtan noch.
hier mal der Code:
Code:
$prog &HFC , &HFF , &HD9 , &H00
$regfile = "attiny2313.dat"
$crystal = 4000000
Open "COMD.0:9600,8,n,2" For Input As #1 ' Software UART konfigurieren
' Variablendeklaration
Dim Zeiger As Byte At &HA0
Zeiger = 1
Dim Flag As Byte At &HA1
Dim Adresse As Eram Byte
Dim Hot As Eram Byte 'Scharfschalt-Status im eeProm
Dim Adresse_temp As Byte At &HA2
Dim Tempword As Word At &HA3
Adresse_temp = Adresse
Dim Tempbyte As Byte At &HA5
Dim Tempbyte2 As Byte At &HA6
Dim Init As Byte At &HA7
Dim Protokoll(10) As Byte
'Ausgangsports konfigurieren
Ddrd = &B10111110
Ddrb = &B11111111 'Beispiel: DDRx = &B0000100 'Pin Px2 Ausgang, Rest Eingang
Portb = 0
Portd = &B01000000
' 2-mal Timer konfigurieren
Config Timer0 = Timer , Prescale = 1024
On Timer0 Timer_irq 'Nosave
Stop Timer0
Config Timer1 = Timer , Prescale = 64
On Timer1 Timer_irq2 'Nosave
Disable Timer1
Stop Timer1
Timer1 = 0
Enable Timer0
Enable Interrupts
Waitms 100 ' Initialisieren bereit
If Pind.6 = 0 Then
Waitms 100
If Pind.6 = 0 Then
Portd.5 = 0
Init = 1
Hot = 0
Waitms 100
Timer1 = 20500
Enable Timer1
Start Timer1
End If
End If
If Hot = 1 And Init = 0 Then 'Scharfschalt-Status setzen
Portd.5 = 1
End If
Do ' Mainloop, hier dreht der Controller seine Runden
Tempbyte = Waitkey(#1) ' ware auf Zeichenempfang über Soft-UART
Gosub Zeichenempfang ' gehe zu Zeichenverarbeitung
If Flag = 1 Then ' Protokoll ist komplett ?
Gosub Proto
Flag = 0 ' Protokollflag wieder rücksetzen
Zeiger = 1
Elseif Flag = 2 Then ' Protokoll ist komplett ?
Gosub Scharfschalten ' Protokoll abarbeiten
Flag = 0 ' Protokollflag wieder rücksetzen
Zeiger = 1 ' zeiger für Speicherung des nächsten eingehenden Zeichens rücksetzen
End If
Loop
Zeichenempfang:
'Tempbyte = Udr
Protokoll(zeiger) = Tempbyte ' empfangenes Byte in Protokoll ablegen
If Tempbyte = 0 Then ' Protokollende erreicht
Zeiger = 1 ' Protokollzeiger zurücksetzen
End If
If Protokoll(1) = 27 Then ' Wenn Protokollbeginn erkannt
If Tempbyte = 0 Then ' und aktuell empfangenes Byte ist Protokollende
Flag = 1 ' Protokollabarbeitung veranlassen
End If
Incr Zeiger ' sonst nächste Speicherstelle für Protokoll auswählen
Elseif Protokoll(1) = 35 Then ' Wenn Protokollbeginn erkannt
If Tempbyte = 0 Then ' und aktuell empfangenes Byte ist Protokollende
Flag = 2 ' Protokollabarbeitung veranlassen
End If
Incr Zeiger ' sonst nächste Speicherstelle für Protokoll auswählen
Else
Zeiger = 1 ' Protokoll wieder von vorne beginnen
Timer0 = 0 ' Timer 0 resetten
Start Timer0 ' timer 0 starten
Enable Timer0 ' und Interrupt aktivieren
End If
Return
End
Timer_irq:
Stop Timer0
Disable Timer0
Zeiger = 1
Return
End
Timer_irq2:
If Init = 1 Then
Timer1 = 60500
Toggle Portb.0
Else
Portb = 0 ' Ports rücksetzen
Timer1 = 0 ' Timer zurücksetzen
Disable Timer1 ' Timer interrupt deaktivieren
Stop Timer1 ' Timer stoppen
Protokoll(1) = 0
Protokoll(2) = 0
Protokoll(3) = 0
Protokoll(4) = 0
End If
Return
End
Proto:
If Protokoll(2) = Adresse_temp Then ' prüfen ob diese Platine angesprochen ist
Flag = 3
End If
If Protokoll(2) = 255 Then ' prüfen ob alle angesprochen sind
Flag = 3
End If
If Flag = 3 Then ' Ausführung wenn Adresse stimmt oder alle angesprochen sind
Flag = Protokoll(3)
If Flag = 64 And Init = 0 Then ' Programm verzweigen nach Steuerbyte des Protokolls
Portb = Protokoll(4) ' Port setzen
Timer1 = 53036
Enable Timer1
Start Timer1
End If
' INITIALISIEREN
If Flag = 72 And Init = 1 Then
Init = 0
Flag = Protokoll(4)
Adresse = Flag ' Adresse in EEPROM speichern, wird bei nächstem Reset verwendet
Adresse_temp = Protokoll(4) ' neue Adresse ab sofort verwenden, auch ohne Reset
Portb = 0
End If
End If
Protokoll(1) = 0 ' gespeichertes Protokoll löschen
Protokoll(2) = 0
Protokoll(3) = 0
Protokoll(4) = 0
Return
End
Scharfschalten: ' Programmteil scharf schalten
If Init = 0 Then
Portb = 0
If Protokoll(2) = 255 Then
Flag = 4
If Flag = 4 Then
Flag = Protokoll(3)
End If
If Flag = 64 Then
Flag = Protokoll(4)
End If
If Flag = 0 Then
Portd.5 = 0 'Module unscharf
Hot = 0 'Status ins eeProm
End If
If Flag = 1 Then
Portd.5 = 1 'Module scharf
Hot = 1 'Status ins eeProm
End If
End If
Protokoll(1) = 0 ' gespeichertes Protokoll löschen
Protokoll(2) = 0
Protokoll(3) = 0
Protokoll(4) = 0
Timer1 = 53036
Enable Timer1
Start Timer1
End If
Return
End
Ich danke euch schon mal im vorraus, für die Hilfe