VxWorksのプログラムからエラーを削除するアウト> PLSの

K

kingsden

Guest
私はすぐにロビンスケジューリングをラウンドプログラムを実行している使用してカウンタを0になる。

もし私が......午前作品ラウンドロビン機能¥当初与え、確率を取得する任意のカウント値として0私はしない

しかし、時......実行のラウンドtaskspawnとして3または4の値iを与えるカウントしませんロビン機能¥塩基plsは.....私を助けて時間デモ保留中の5時間....

<img src=¥"http://www.edaboard.com/images/smiles/icon_sad.gif¥" alt=¥"悲しい¥" border=¥"0¥" />ここにコードを示します。

#が含まれます"vxWorks.h"
#が含まれます"logLib.h"
#が含まれます"wdLib.h"
#が含まれます"sysLib.h"
#が含まれます"stdio.hに"
#が含まれます"taskLib.h"
#が含まれます"kernelLib.h"

/ *関数*をプロトタイプ/
ボイドtaskOne(ボイド);
ボイドtaskTwo(ボイド);
ボイドtaskThree(ボイド);
ボイドは)schedは(ボイド;

/ *グローバル変数* /
#1は定義ITER1を
#1は定義ITER2を
#200は定義優先を
)(定義タイムスライスsysClkRateGetを#
1000000 LONG_TIME#を定義する

概要static intのx、y、zは、= 1、b = 2、kは;
int型taskIdOne、taskIdTwo、taskIdThree;
/************************************************* ******************************
*
*ウォッチドッグ-簡単なデモルーチン
*
*このルーチンはセットタイマーをしてカウントからダウン遅延
*"は印刷AaaahhhhhOOOOOOOOO!"繰り返し後の遅延。
*各繰り返しは、より2番目の設定されて以下の1以前.* // *これは*はウォッチドッグタイマ/

WDOG_IDのmyWatchDog;

/ *これはアウトタイマがタイム時に呼び出される実際の関数なる
これは、ゼロダウンカウントしたが、それはどうかをテストを見るために
れていない場合は、秒1の遅延のためになるスケジュール自体をCNTの
* /

(int型の樹皮(int型CNT)を

/ * *場合呼び出し、これが最後の/
のprintf("の遅延値)=%d"が、CNTの;

(もしカーボンナノチューブ== 0)

のprintf("AaaahhhhhOOOOOOOOO!する¥¥ nする¥¥ n");
taskIdOne = taskSpawn("メイン"、優先度、0x300から、20000(FUNCPTR)0,0,0,0,0,0,0,0,0,0をschedは、);
のprintf("assfする¥¥ nを¥¥ n");
戻り値(0); / *戻り値を* VxWorksのですが必要/


/ *樹皮場合は、0我々はされていませんダウンし、*を再スケジュール/

のprintf("(%d)はバーク!¥¥ n"の、カーボンナノチューブ);

/ *再スケジュール自身、タイマー設定* SECONDS秒1カーボンナノチューブに行くオフイン/
/ *のwdStart()は、ウォッチドッグタイマを初期化する
myWatchDogは、タイマーです
sysClockRateGetは(*)のCNTを、時間を秒カーボンナノチューブする設定
樹皮は、さに呼び出す関数がタイムアウト
カーボンナノチューブ- 1は関数であるに渡すパラメータに。
wdStartがエラーを返すコードを障害またはを示す成功
* /

場合は、(wdStart(myWatchDog sysClkRateGet()*のCNTを、FUNCPTR(樹皮)、
カーボンナノチューブ- 2)==エラー)

/ *失敗した場合はリスケジュールは、*を返すエラーコード/

戻り値(エラー);

/ *他の*を返すカーボンナノチューブ/

戻り値のカーボンナノチューブ。
)/ *この関数は、メイン、それが
、サインオンメッセージを表¥示
、ウォッチドッグタイマを作成する
とカウントを呼び出す最初の樹皮のための時間として遅延と
* /

int型ウォッチドッグ(int型の遅延)(
のprintf("ウォッチドッグ料金います... ¥¥ n");

/ * *を作成するウォッチドッグ/

myWatchDog場合((= wdCreate())== NULL)は
リターン(9999); / *エラーコード*をが失敗した場合の作成は/

のprintf(")を遅らせる遅延=%dが";遅延は 4 / /ここでは指定数が私の午前=

遅延... ジュースを遅延する削除行をコメントこの/ *呼び出す*樹皮自体はのreinvocationsをスケジュールを繰り返しします/

)樹皮(遅延;



/ /ラウンドロビンタスクは関数ですスケジューボイドは* schedは(ボイド)/ *の3つの機能¥を作成作業を/


kernelTimeSlice場合((ライス)== OK)を/ラウンドロビンに*ターン* /
printfの(します¥¥ n"する¥¥ nする¥¥ nする¥¥ n ¥¥トン¥¥トン¥¥ tTIMESLICE =%d秒する¥¥ nする¥¥ n ¥¥ n"をTIMESLICE/60);

/ *は* 3つのタスクを起動/

(のk = 0; kの<10; kは )

"taskSpawn("taskIdOne = task1場合((、優先度、0x100を、20000、(FUNCPTR)taskOne、0,0,0,0,0,0,0、
0,0,0))==エラー)
のprintf("taskSpawnのtaskOne)は、nに失敗しました"¥¥;

taskDelay(100);
"taskSpawn("taskIdTwo = task2場合((、優先度、0x100を、20000、(FUNCPTR)taskTwo、0,0,0,0,0,0,0、0,0,0)) == ERROR) のprintf("taskSpawnのtaskTwo)は、nに失敗しました"¥¥;

taskDelay(100);
"taskSpawn("taskIdThree = task3場合((、優先度、0x100を、20000、(FUNCPTR)taskThree、0,0,0,0,0,0,0、
0,0,0))==エラー)
のprintf("taskSpawnのtaskThree)は、nに失敗しました"¥¥;
taskDelay(100);
/ /のexternなし睡眠(10);

;
b ;)


ボイドtaskOne(ボイド)

int型私は、jが;
0(一=;私は<ITER1;私 )

)の(jは= 0; jは<ITER2; J の
のprintf("task1が"nを実行して¥¥である); / *ログメッセージ* /

はx = * b;
のprintf("値のxは、%d個の¥¥ n個の"×);

* LONG_TIME; jは ); /許可時間をコンテキストスイッチ*用<jは、0(jは= /



ボイドtaskTwo(ボイド)

int型私は、jが;
0(一=;私は<ITER1;私 )

)の(jは= 0; jは<ITER2; J の
のprintf("task2は、n ¥¥て実行");
y = xを*;
のprintf("yの値)は%d個の¥¥ n"の、yの;
* LONG_TIME; jは ); /許可時間をコンテキストスイッチ*用<jは、0(jは= /



ボイドtaskThree(ボイド)

int型私は、jが;
0(一=;私は<ITER1;私 )

)の(jは= 0; jは<ITER2; J の
のprintf("task3には、n ¥¥て実行");
はz = yは* b;
のprintf("値のz)は%d個の¥¥ n"のは、z;
* LONG_TIME; jは ); /許可時間をコンテキストスイッチ*用<jは、0(jは= /

)[/ u]の

 

Welcome to EDABoard.com

Sponsor

Back
Top