Neki banalizovan primer jednostavnog i ekstremno brzog multitaskinga:
P.S.
Bare metal ili ti "plekano" pisanje, što bi rekle babe :-)
Code:
//prekondicioniranje
master_seq=n_task; //pokreni zeljen task
master_jump=x; //obezbedi ili ne obezbedi jednokratan dogadjaj u masteru
err_no=0; //ponisti greske
while(uslov_bez_err){
switch(master_seq){ //master masina
case 0:
if(master_jump){ //jednokratni dogadjaj u master masini
task1_seq=start; //na primer startuj task 1
task1_jump=1; //na primer omoguci neki jednokratni dogadjaj u njemu
master_jump=0; //ne ponovi
}
else{ //vrti se jako brzo i cekaj potrebne taskove, potom arbitriraj sa njihovim rezultatima
if(task1_seq==end){ uradi_nesto; task1_seq=iddle; } //cekaj kraj 1. taska idi negde i
//prebaci ga na "ler"
if(taskX_seq==end){uradi_nesto_drugo; taskX_seq=iddle;} //cekaj neki drugi task mozda
}
break;
case n:
//... neka druga sekvenca master masine
break;
}
switch(task1_seq){ //jedan od taskova
case iddle:
//dogadjaji gde se ne radi nista ili nesto vezano za iddle stanje konkretnog taska
break;
case start: //poslat ovde iz master masine, kao start
//prekondicioniranje samostalnog taska
break;
case radi_nesto: //sam nesto obavlja
//nesto sto radi samostalni task1
break;
case end: //zavrsio ili obezbedio potrebne uslove
//ono sto treba kad se sve obavi i indikacija za master masinu koja "posmatra" task1_seq
break;
}
if(err){
//zajednicka obrada gresaka i abort potrebnih stvari
}
}
P.S.
Bare metal ili ti "plekano" pisanje, što bi rekle babe :-)