hab das Programm geändert - aber es lief vorher auch schon: hab es aber immer nur ein paar Minuten getestet...
Aber ich möchte es natürlich nicht riskieren das der µC sich "aufhängt"
Code:'------------------------------------------------------------------------------- 'Konfiguration µC: $regfile = "m32def.dat" 'AT-Mega32 $crystal = 14745600 'Quarz: 14,7456 MHz $baud = 9600 'Baudrate definieren $hwstack = 80 ' default use 32 for the hardware stack $swstack = 80 ' default use 10 for the SW stack $framesize = 80 ' default use 40 for the frame space '------------------------------------------------------------------------------- 'Ein- Ausgänge: Ddra = &B00000000 '1 Ausgang, 0 Eingang = Pin PA7-0 Ddrb = &B11111111 '1 Ausgang, 0 Eingang = Pin PB7-0 Ddrc = &B11111111 '1 Ausgang, 0 Eingang = Pin PC7-0 Ddrd = &B01111111 '1 Ausgang, 0 Eingang = Pin PD7-0 Porta = &B00000000 '1 = Pullup Portb = &B00000000 '1 = Pullup Portc = &B11111111 '1 = Pullup Portd = &B00000000 '1 = Pullup '------------------------------------------------------------------------------- 'Timer1 = 16 Bit Config Timer1 = Timer , Prescale = 64 'Teiler 1/8/64/256/1024 Enable Timer1 'timer einschalten Const Timer1vorgabe = 7936 '7936 = 4 mal pro Sekunde Timer1 = Timer1vorgabe On Timer1 Ontimer1overflow 'Unteprogramm aufrufen '------------------------------------------------------------------------------- 'Analogmessung: Config Adc = Single , Prescaler = Auto , Reference = Avcc Start Adc 'Starte analog Messung '------------------------------------------------------------------------------- 'USB Confi!!!! Echo Off '///für USB-Stick Open "com1:" For Binary As #1 '///für USB-Stick 'Dim Samples As Word 'Anzahl der Messungen Dim Delayms As Long 'Messintervall in ms (Long bis 2.147.483.647) Dim Channels As Word 'Anzahl der Messkanäle (8Kanäle -> 0-7)(Word bis 65535) Dim N As Integer Dim I As Integer Dim L As Integer Dim S As String * 40 Dim Ad As Integer Dim Messung As Long 'Anzahl der gemessenen Werte (Long bis 2.147.483.647) Dim Wartezeit As Long 'Wartezeit über Timer Dim Auslesen_ok As Bit 'ausleseroutine erfolgreich Dim Logging As Bit '1 = Daten werden aufgezeichnet '------------------------------------------------------------------------------- 'Vor Programmstart: Auslesen_ok = 0 Logging = 0 Wartezeit = 999 Delayms = 0 Start Adc 'Analogmessung starten Stop Timer1 '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- 'Hauptprogramm Do...Loop '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- Do '_______________________________________________________________________________ 'Reset If Pind.7 = 0 Then 'RESET Auslesen_ok = 0 'Speicher zurücksetzen End If '_______________________________________________________________________________ 'Auslesen If Auslesen_ok = 0 Then Logging = 0 Messung = 0 'Zähler für Messungen zurücksetzen Portb.0 = 0 'schreib LED aus Auslesen_ok = 0 'Speicher zurücksetzen Gosub Usb_auslesen End If '_______________________________________________________________________________ 'speichern If Logging = 1 Then Logging = 0 Gosub Usb_schreiben End If Loop '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- 'ENDE - Hauptprogramm Do...Loop '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- Usb_auslesen: Stop Timer1 Do Input S Loop Until S = "D:\>" 'USB Controller abfragen, bis D:\> gesendet wird Waitms 1000 Print "rd todo.txt" + Chr(13); 'todo.txt Datei LESEN Input Delayms 'Wartezeit zwischen den Messungen aus Datei übernehmen Get #1 , L Input Channels 'Anzahl der Messkanäle aus Datei übernehmen Get #1 , L Input S Auslesen_ok = 1 Enable Interrupts Start Timer1 Return '------------------------------------------------------------------------------- Usb_schreiben: Print "OPW Log.txt" + Chr(13); 'Datei Log.txt öffnen Input S Portb.0 = 1 'schreib LED an Incr Messung S = Str(messung) + Chr(9) For I = 0 To Channels 'Kanäle 0-7 MAX Ad = Getadc(i) 'hole Analogwert von Kanal = (Variable "I") S = S + Str(ad) 'S + aktuellen Analogkanal If I < Channels Then S = S + Chr(9) 'wenn noch nicht alle Kanäle abgefragt wurden kommt ein Chr(9) = Tab drann!!! Next I S = S + Chr(13) + Chr(10) 'zum Schluss noch Zeichen 13+10 Carriage Return + Line Feed L = Len(s) 'gibt die Länge von String "S" wieder Print "WRF "; 'Befehl um in die geöffnete Datei zu schreiben Put #1 , 0 Put #1 , 0 Put #1 , 0 Put #1 , L 'L ist die Länge vom String S Put #1 , 13 Print S ; Input S Print "CLF log.txt" + Chr(13); 'Datei log.txt schließen Input S Portb.0 = 0 'schreib LED aus Return '------------------------------------------------------------------------------- 'TIMER SPRUNGMARKEN: Ontimer1overflow: Timer1 = Timer1vorgabe Incr Wartezeit 'Toggle Portb.0 'nur zum testen ob timer1 läuft If Wartezeit => Delayms And Auslesen_ok = 1 Then 'Wartezeit zwischen den Messungen Wartezeit = 0 'Wartezeit zurücksetzen Logging = 1 'Daten werden aufgezeichnet End If Return
@for_ro
Dies wird relativ schnell zu einem Stack Overflow führen.
warum führt das zu einem Stack Overflow? Allgemein oder bei Programmierfehlern?
vielen Dank,
Tobias







Zitieren
Lesezeichen