2010年5月31日 星期一

使用NXC撰寫NXT程式---第五章 將程式模組化

使用NXC撰寫NXT程式---第五章 將程式模組化

一、程序
sub 程序名(參數1,參數2,...)
{
    //程式碼...

}

//將轉彎的功能以程序包裝起來,要用時再呼叫。
sub turning(int power)
{
    OnRev(OUT_BC, power);//B、C反轉
    Wait(3000);
    OnFwd(OUT_C, power); //C正轉,B繼續反轉
    Wait(500);

}

task main()
{
    OnFwd(OUT_BC, 80);
    Wait(1000);
    turning(30); //呼叫turning,傳入30%的動力
    OnFwd(OUT_BC, 80);
    Wait(2000);
    turning(50); //呼叫turning,傳入50%的動力
    Off(OUT_BC);

}

二、函式 (function)
傳回值型別 函式名(參數1, 參數2,…)
{
//…
return 傳回值;
}

與程序主要的不同點在於:
函式可有傳回值,若無則傳回值型別以 void 表示。


//隨機傳回x~y的任一數
int myRand(int x, int y)
{
    int result;
    result = (x+ Random(y+1-x)); //隨機取 x~y
    return result;

}

task main()
{
    int time,power;
    time= myRand(2,5)*1000; //隨機取2~5秒
    NumOut(5,20,time,true);
    OnFwd(OUT_BC,80);
    Wait(time); //隨機等待2~5秒

    power= myRand(3,5)*10 ; //隨機取30、40或50
    NumOut(5,10,power);
    OnRev(OUT_C,power); //隨機以30%、40%或50%動力輸出
    Wait(time); //隨機等待2~5秒
    Off(OUT_BC);

}



三、inline function
inline 傳回值型別 函式名(參數1, 參數2,…)
{
    //…
    return 傳回值;

}

與函式之不同處在於:
程式在編譯前,會先行內擴展(就是取代啦!),
將函式中的程式碼直接複製一份在呼叫的程式中,
直接執行函式中的指令,並非以呼叫的方式來調用函式,
因此,使用inline function會使程式碼大小增加,
但因省掉函式呼叫時,位址與記憶空間需保留的堆疊運算,
執行效率會比較高。

如果您的程式很大,NXT記憶體寸土寸金,
當然就不適合使用inline function了。

1 則留言:

  1. 我遇上了一些有關於NXC方面的撰寫問題
    請問您是否可以提供聯絡方式讓我向您請教

    回覆刪除