Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Neue Beta und Threads Kategorie: IDE (von PeterS - 6.09.2010 8:58)
Als Antwort auf Re: Neue Beta und Threads von Joerg - 6.09.2010 7:13

> > 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


    Antwort schreiben


Antworten: