Wednesday, 25 June 2008

Multi-tasking and Time sharing with Rabbit 3000 (RCM 3700) MCU

Rabbit MCU နဲ႔ software ေရးတဲ့အခါ Dynamic C ဆိုတဲ့ compiler ကိုသံုးပါတယ္။ ကၽြန္ေတာ္ေျပာမွာက အဲဒီ compiler မွာပါတဲ့ build-in function တစ္ခုကိုေျပာခ်င္တာပါ။ သူ႔မွာ multi tasking လုပ္တဲ့ function ေလးတစ္ခုပါပါတယ္။ costate { ... } ပါ။ အဲဒါက program run ေနတဲ့အခ်ိန္တိုင္းမွာ သြားစစ္ပါတယ္။ တကယ္လို႔ function တစ္ခုကို costate ထဲမွာေရးထားရင္ အဲဒါကိုအရင္လုပ္ပါတယ္။ ၿပီးမွ main program ထဲက function ေတြကိုဆက္လုပ္ပါတယ္။ costate ထဲမွာ wait ေနတဲ့အခ်ိန္မွာ deadlock ျဖစ္မွာစိုးလို႔ waitfor( ) ကိုတြဲၿပီးသံုးရပါတယ္။ waitfor( ) ထဲမွာ delay ကို သတ္မွတ္ေပးထားတာနဲ႔ time slot ရဲ႕ ကို ဖန္တီးေပးထားလို႔ ရပါတယ္။ costate, waitfor နမူနာေလးတစ္ခု ျပထားပါတယ္။

main() { // echoes null terminated character strings
int getOk;
char s[16];
serAopen(19200);
loopinit();
while (1) {
loophead();
costate {
wfd getOk = cof_serAgets (s, 15, 20);
if (getOk)
wfd cof_serAputs(s);
else { // timed out: s null terminated, but incomplete
}
waitfor(MS_TIMER>=150)
}
}
serAclose();
}

No comments:

Post a Comment