Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > > Hi Jörg, > > > > > > werde ich mal analysieren. > > > > > > Gruss Peter > > > > > > > Hallo Peter, > > > > > > > > es liegt an dem 10ms IRQ im Zusammenhang mit den Threads. > > > > > > > > Das Problem läßt sich relativ einfach mit der multithread2.cc Demo > > > > reproduzieren. Ergänzt man in dieser Demo den 10ms IRQ, > > > > dann bleibt auch hier der Main Thread 0 stehen. > > > > Thread 1 läuft weiter. > > > > > > > > Grüße Jörg > > > > > > > > > > > > > > > > // multithread2: Multithreading mit Thread_Delay > > > > // erforderliche Library: IntFunc_Lib.cc > > > > #define LF 0x0A > > > > #define CR 0x0D > > > > #define SPACE 0x20 > > > > > > > > #thread 0, 0, 10 // Hauptthread mit Task Wechsel alle 10 * 10ms = 100ms > > > > #thread 1, 128, 10 // Thread 1 mit 128 byte RAM & Task Wechsel 10 * 10ms = 100ms > > > > > > > > void INT_10ms(void) > > > > { > > > > int irqcnt; > > > > irqcnt=Irq_GetCount(INT_TIM2COMP); // Interrupt Request Counter > > > > } > > > > > > > > > > > > > > > > //------------------------------------------------------------------------------ > > > > // thread1 zur Zeichenausgabe > > > > // > > > > void thread1(void) > > > > { > > > > while(true) > > > > { > > > > Msg_WriteText(str2); > > > > Msg_WriteChar(CR); > > > > Thread_Delay(200); > > > > } // "Thread2" wird ausgegeben. > > > > } // Danach ist der Thread > > > > // für 2000ms "schlafend". > > > > > > > > char str1[12],str2[12]; // globale Variablendeklaration > > > > > > > > //------------------------------------------------------------------------------ > > > > // Hauptprogramm > > > > // > > > > void main(void) > > > > { > > > > str1="Main"; // Variablendeklaration > > > > str2="Thread"; // Variablendeklaration > > > > > > > > Irq_SetVect(INT_TIM2COMP,INT_10ms); // Interrupt Service Routine definieren > > > > // Timer2 erzeugt einen 10ms interrupt > > > > > > > > > > > > Thread_Start(1,thread1); // Funktionsaufruf mit Angabe der > > > > // Threadnummer. > > > > while(true) // Endlosschleife > > > > { > > > > Thread_Delay(100); > > > > Msg_WriteText(str1); > > > > Msg_WriteChar(CR); > > > > > > > > } // Der Thread ist für 1000ms "schlafend". > > > > } // Danach wird "Thread1" ausgegeben. > > > > > > Hallo Peter, > > > > konntest Du das Problem schon nachvollziehen, bzw. wann wird es hierfür eine Lösung geben? > > > > Grüße Jörg > > > > Hallo Jörg, > > ich habe am Samstag das Problem verstanden, und arbeite heute an einer Lösung. > > Gruss Peter