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

Re: Threads Kategorie: Programmierung C (von PeterS - 11.02.2011 17:44)
Als Antwort auf Re: Threads von Manfred - 11.02.2011 16:54

> > > Hallo,
> > > zu den neuen Zeitscheiben-Threads habe ich noch eine Frage,
> > > da mein Programm mit der IDE 2.12 nicht mehr läuft.
> > > Wie werden die Interrupts in dieses System eingeordnet.
> > > Mein Programm hat 3 Threads, den 10 ms Interrupt und einen externen Interrupt, der im 1s- Rythmus
> > > angesteuert wird.
> > > Gruss
> > > manfred
> >
> > Hallo Manfred,
> > die Interrupts laufen wie bisher. Wenn Dein Programm nicht mehr läuft, hast
> > Du auch die "#thread" Anweisungen in Dein Programm eingefĂĽgt? Seufz, ich hatte ja
> > gehofft, das das Popup während der Installation gelesen wird, dort wird auf
> > die Ă?nderung hingewiesen.
> >
> > Gruss Peter
>
> Hallo Peter,
> meine "#thread"-Anweisungen:
> #thread 0, 0, 50                        // Rest vom RAM, 500 ms Zyklus
> #thread 1, 128, 1                       // 128 byte RAM, 10 ms Zyklus
> #thread 2, 128, 1                       // 128 byte RAM, 10 ms Zyklus
> Werden die Interrupts ohne Unterbrechung durch die Threads ausgefĂĽhrt?
> Mir ist unklar welche Prioritäten die Interrupts haben.
> Kannst Du was dazu sagen?
> Gruss Manfred

Interrupts können nicht unterbrochen werden. INT_0 hat die höchste Priorität, INT_TIM3OVF
die niedrigste (siehe Interrupt Tabelle). Interrupts arbeiten aber auf Bytecode Ebene, wenn
der aktuell laufende Bytecode länger braucht (z.B. floating point ops) dann kann das
länger dauern. Auch Bibliotheksaufrufe sind atomar, z.B. ein AbsDelay(2000); unterbricht
Multithreading und Interrupts fĂĽr 2000ms.

Bei einem Zeitscheibenwert von 10ms kann es passieren, das wenn der aktuelle Bytecode 9ms
benötigt, der neue Thread nur 1ms läuft, da seine Zeitscheibe abgelaufen ist. Daher für
Threads lieber Werte ab 20ms und grö�er angeben.

Gruss Peter


    Antwort schreiben


Antworten: