/* * タスク起床のキューイング * * OS: T-Kernel * */ #include /* T-Kernel ヘッダ */ #include /* タスクトレーサ */ /* オブジェクト ID 番号 */ LOCAL ID tidA; /* タスク A の ID */ LOCAL ID tidB; /* タスク B の ID */ LOCAL ID tidC; /* タスク C の ID */ /* タスク A */ LOCAL void taskA(INT stacd, void *exinf) { /* タスク B を起床する */ /*??*/; /* タスク B を起床する */ /*??*/; /* 自タスクを終了・削除する */ /*??*/; } /* タスク B */ LOCAL void taskB(INT stacd, void *exinf) { /* スリープ(起床待ち)する */ /*??*/; /* スリープ(起床待ち)する */ /*??*/; /* 自タスクを終了・削除する */ /*??*/; } /* タスク C */ LOCAL void taskC(INT stacd, void *exinf) { /* タスク B を起動する */ /*??*/; /* タスク A を起動する */ /*??*/; /* 自タスクを終了・削除する */ /*??*/; } /* 初期化処理 */ EXPORT INT usermain(void) { ER er; T_CTSK ct; /* タスク A を生成する */ ct.exinf = (void*)('t' | 's' << 8 | 'k' << 16 | 'A' << 24); /* 拡張情報 */ ct.tskatr = TA_HLNG | TA_RNG0; /* タスク属性 */ ct.task = taskA; /* タスク起動アドレス */ ct.itskpri = 1; /* タスク起動時優先度 */ ct.stksz = 1024; /* スタックサイズ */ tidA = /*??*/; /* タスク A を生成 */ if (tidA < E_OK) { er = tidA; goto e3; } /* タスク生成失敗時 */ /* タスク B を生成する */ ct.exinf = (void*)('t' | 's' << 8 | 'k' << 16 | 'B' << 24); /* 拡張情報 */ ct.tskatr = TA_HLNG | TA_RNG0; /* タスク属性 */ ct.task = taskB; /* タスク起動アドレス */ ct.itskpri = 2; /* タスク起動時優先度 */ ct.stksz = 1024; /* スタックサイズ */ tidB = /*??*/; /* タスク B を生成 */ if (tidB < E_OK) { er = tidB; goto e2; } /* タスク生成失敗時 */ /* タスク C を生成する */ ct.exinf = (void*)('t' | 's' << 8 | 'k' << 16 | 'C' << 24); /* 拡張情報 */ ct.tskatr = TA_HLNG | TA_RNG0; /* タスク属性 */ ct.task = taskC; /* タスク起動アドレス */ ct.itskpri = 3; /* タスク起動時優先度 */ ct.stksz = 1024; /* スタックサイズ */ tidC = /*??*/; /* タスク C を生成 */ if (tidC < E_OK) { er = tidC; goto e1; } /* タスク生成失敗時 */ /*??*/; /* タスク C を起動 */ return E_OK; e1: /*??*/; /* タスクBを削除する */ e2: /*??*/; /* タスクAを削除する */ e3: return er; }