Re: Fehlermeldung Kategorie: Programmierung (von André H. - 15.01.2003 9:05) | |
Als Antwort auf Fehlermeldung "ILL INA" von Martin Rieger - 15.01.2003 1:19
| |
Hallo Martin, > > bei einem laenger dauernden Lesevorgang von EEPROM mit Ausgabe auf ein Terminal bekomme ich nach ca 2 min (bzw ca 800 Ausgabezeilen) die Meldung "ILL INA" auf dem internen LCD und der Rechner steht dann. > Der Meldung "ILL INA" hei�t "Illegal Instruction Access Flag". Beschreibung des C164 Handbuchs: A branch to an odd address has been attempted. Die etwas längere Erklärung des C164 Handbuchs: Illegal Instruction Access Trap Whenever a branch is made to an odd byte address, the ILLINA flag in register TFR is set and the CPU enters the illegal instruction access trap routine. The IP value pushed onto the system stack is the illegal odd target address of the branch instruction. Mehr ist leider nicht zu finden. Auf jeden Fall wurde zu einer ungeraden Byte Adresse gesprungen. Das kann mit Arrays passieren, wenn diese mit einer ungeraden Grö�e definiert sind. Poste bitte mal die Variabel-Definitionen für die unten verwendeten Variablen, und schreibe dazu, ob diese Lokal(innerhalb einer Funktion) oder Global sind. Vielleicht auch den ganzen Thread. > > Das Codestueck, in dem der Rechner stehen bleiben duerfte, sieht so aus (gekuerzt) > loop > { > eeprom.readbytearray(eeadr,pos,dataframe,satzlaenge); > sleep 100; > s=""; > str.putint(s,dataframe[1]); > ....... > hwcom.print(s);hwcom.rxd();wait hwcom.ready(); Warum steht hier ein hwcom.rxd() ? Es macht überhaupt keinen Sinn. Die Funktion gibt True oder False zurück und signalisiert so, ob Daten im Empfangspuffer sind. Aber der Rückgabewert wird nicht ausgewertet. Also kann das rxd() ganz raus. > ....... > tmp= mem.getint(dataframe,8); > s5=""; > str.putint(s5,tmp); > s4=" "+s5+";"; > hwcom.print(s4); > hwcom.ret(); wait hwcom.ready(); Dieses wait ready() ist nicht notwendig. das macht bereits die Funktion ret(); wait ready() wird nur benötigt, wenn mehrer Strings oder Bytearrays über dieselbe Variable nacheinander gesendet werden. > pos=pos+satzlaenge; > > if pos>=EEPromsize or > (((eeprom.readbyte(eeadr,pos))==0xFF) > and ((eeprom.readbyte(eeadr,pos+(satzlaenge-1))))==0xFF) > break; > ..... > } MfG André H. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | |
Antwort schreiben Antworten: Re: Fehlermeldung (von Martin Rieger - 15.01.2003 21:29) |