Binnen het opdrachtblok kunnen locale variabelen gedefinieerd worden, die quasi – statisch zijn (zie
5.5.5). De totale code van het opdrachtblok wordt automatisch in een eindeloze lus uitgevoerd.
Voorbeeld:
Thread blink2
{
ports.set (2, -1);
sleep 200;
ports.set (2,0);
sleep 800;
}
5.9.2
Main threads
Een thread, waarvan het kenmerk niet "main" is, heeft bij de start van het programma de prioriteit 0,
d.w.z. hij bevindt zich in stilstand, zijn opdrachten worden niet uitgevoerd.
Elke module kan een main - thread bevatten, dus een thread met het kenmerk "main". Deze heeft bij de
start van het programma de standaardprioriteit 32. De opdrachten ervan worden van begin af aan
uitgevoerd. Het is de opgave van de main – thread initialiserigen uit te voeren en wanneer nodig andere
threads te starten.
Een programma dient minimaal een module met een main – thread te hebben. Anders staat het hele
programma stil en wacht eindeloos op het run – commando (zie 5.9.3).
5.9.3
Prioriteitssturing
De virtuele machine van de C-Control II unit stelt elke thread zoveel rekencapaciteit ter beschikking als
overeenkomt met zijn prioriteitswaarde. Een thread met prioriteit 32 kan exact 32 virtuele machine –
operaties achter elkaar uitvoeren, tot hij onderbroken wordt door het systeem en de volgende thread aan
de beurt is. Ter ori ntering: de opdracht
a = b + c;
wordt in vier virtuele machine – operaties uitgevoerd, als a, b en c van hetzelfde datatype zijn:
1. b op de stack laden
2. c op de stack laden
3. optellen
4. resultaat in a opslaan
Complexere opdrachten zijn dienovereenkomstig omvangrijker. Het systeem kan een thread in ieder
geval ook binnen een opdracht onderbreken, b.v. voor de optelling in het bovenstaande voorbeeld.
Omdat elke thread met zijn eigen stack werkt, ontstaan daarbij geen problemen.
Voor het veranderen van de prioriteit van een thread bestaan er in C2 verschillende codewoorden.
• •
run
Het codewoord run wordt in twee vormen toegepast. Vorm 1 stelt de prioriteit van de aangegeven thread
op de standaardwaarde 32. Deze vorm is er in de regel voor bedoeld om van main threads uit andere
threads te starten. Vorm 2 stelt de prioriteit van de op dat moment uitgevoerde thread op het resultaat
van de aangegeven numerieke term.
Vorm 1:
run ThreadName;
Bijvoorbeeld:
run blink2;
Vorm 2:
run numerieke opdracht;
Voorbeeld:
run 100;
Let er op dat een stilstaande thread met prioriteit 0 zich nooit met run zelf kan starten!
40