Re: Problem beim Aufruf eines externen Programmes Kategorie: Progr. Assembler, TaskingTools, OS (von Matthias SiemĂ - 10.05.2004 10:37) | ||
Als Antwort auf Re: Problem beim Aufruf eines externen Programmes von André H. - 9.05.2004 15:31 | ||
| ||
Hallo AndrĂ©, danke erstmal fĂŒr deine Antwort. Ich habe mein Programm zum Testen erstmal sehr klein gehalten und das while ( ) durch das loop ( ) ersetzt wie von Dir vorgeschlagen. Habe das Problem aber trotzdem. Darum hier mein Quelltext: thread main { hwcom.init(); hwcom.setspeed(8); ports.set(5,1); hwcom.put(1); hwcom.put(13); loop { sleep (500); system.call(3,0x0000); sleep (500); hwcom.put(13); } } FĂŒr meine folgende System-Routine benutze ich eine gnu-c Compiler: void SerPut( char ch ) { S0TIC &= 0xffbf; // Wait until last transmission ready. while ( ( S0TBIC & 0x0080) == 0 ); S0TBIC &= 0xff7f; S0TBUF = ch; // Wait until transmission ready. while ( ( S0TIC & 0x0080) == 0 ); S0TIC &= 0xff7f; S0TIC |= 0x0040; } // SerPut void main() { int i; for (i=0;i<1000;i++){ SET_SFRBIT( p1l.5 ); CLR_SFRBIT( p1l.5 ) SET_SFRBIT( p1l.5 ) } SerPut(255); } // main Ob das ganze nun lĂ€uft oder sich aufhĂ€ngt, liegt an der Zeit die ich in der System-Routine verbringe, bzw. bei diesem Beispiel an der Anzahl der DurchlĂ€ufe der for-Schleife. So mit den 1000 DurchlĂ€ufen hĂ€ngt er sich wĂ€rend der for-Schleife auf, und erreicht die Ausgabe auf der seriellen Schnittstelle nicht. Wenn ich diese nur 100 mal durchlaufen lasse, so funktioniert es. Weiterhin habe ich mal mit dem Befehl "CLR_SFRBIT( IEN );" vor der for-Schleife die Interrups deaktivert und siehe da, er durchlĂ€uft die for-Schleife komplett und sendet die 255 auf der seriellen Schnittstelle. Nur mit dem setzen der Interrupte am Programmende hĂ€ngt sich die Routine auf. Daher war meine Vermutung, das ein Interrupt (Timer, Watchdog oder Ă€hnliches) nicht mehr richtig behandelt wird. MfG Matthias | ||
Antwort schreiben Antworten: Re: Problem beim Aufruf eines externen Programmes (von André H. - 12.06.2004 18:42) |