程式設計實作

Download Report

Transcript 程式設計實作

程式設計實作
任務task
一個NXC程式最多可以包含255
個task,每一個task都可以有不
同的名稱,但是每個NXC程式中
一定要有一個叫做main的task,
main就是一個NXC程式會首先
執行的task。
當我們要執行其他的task時,需
要使用start指令來呼叫,或使用
Precedes()指令來設定執行順序,
不然其他的task不會有任何動作。
EX6-1.1
task aaa()
{
int a;
OnFwd(OUT_AC,50);
Wait(2000);
Off(OUT_AC);
}
task main()
{
start aaa;
wait (4000);
}
EX6-1.2
task aaa()
{
int a;
OnFwd(OUT_AC,50);
Wait(2000);
}
task main()
{
start aaa;
wait (4000);
stop aaa;
}
任務task
EX6-1
mutex move;
task moving(){
while (true){
Acquire(move);
OnFwd(OUT_BC, 80);
Wait (800);
OnRev(OUT_C, 80);
Wait (1000);
Release(move)
}
}
task bumping()
{
while (true)
{
if(Sensor(S1)==1)
{
Acquire(move);
OnRev(OUT_BC, 75);
Wait (500);
OnFwd(OUT_B, 75);
Wait (1000);
Release(move)
} //if
} //while
} //bumping
task main()
{
SetSensorTouch(S1);
Precedes(moving, bumping);
}
子程式subroutine
範例程式
Sub turning (int power)
{
子程式的結構:
OnRev(OUT_BC, power); Wait(300);
Sub名稱 (資料型別 變數1, 資料型別 變數2 ..)
OnFwd(OUT_C, power); Wait(500);
{
}
要執行的內容
task main()
}
{
OnFwd(OUT_BC, 75); Wait(1000);
turning(30); wait(2000);
Off(OUT_BC);
}
inline function
當程式碼本身不大只有短短數行時,可以使用inline function來包裝一段程
式碼。每呼叫一次inline function就會複製一次這段程式碼,雖然較耗費記
憶體,但inline function沒有數量上的限制。
inline function使用方式如下:
Inline 資料型別 名字 (參數)
{
…指令…
return 回傳值
}
如果不需要inline function回傳資料,在資料型別就要使用void,因沒有回
傳值,所以就不需再將”return 回傳值” 這行程式碼寫上去。
巨集 macro
巨集可用來包裝一段程式碼。
範例:
#define turning OnRev(OUT_B, 75); Wait(3400); OnFwd(OUT_BC, 75);
盡量將要取代的程式碼寫在同一行,若指令太多,可用下列方法來換行:
#define turning \
OnRev(OUT_B, 75); \
Wait(3400); \
OnFwd(OUT_BC, 75);
實作
實作一
做出一輛單光感應軌跡車,task main()負責讓車子沿著黑線走,task
light()負責將光感應器讀取的值顯示在螢幕上。
實作二
各以subroutine與inline function來分析光感應值,當光值大於50時,
回傳1,當光值小於或等於50時,回傳0,並將結果顯示在螢幕上。
PPT下載位址:
http://oss.csie.fju.edu.tw/~neilsun100/program.html