source: asp3_wo_tecs/trunk/extension/messagebuf/kernel/task.h@ 302

Last change on this file since 302 was 302, checked in by ertl-honda, 7 years ago

TECSレスのASP3の開発のため以下のtrunkからコピー
http://dev.toppers.jp/svn/asp3/branches/WO_TECS-3.C.0

File size: 19.5 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2005-2015 by Embedded and Real-Time Systems Laboratory
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 *
11 * 上記著作権者
12は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
13 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
14 * 変・再é…
15å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
17 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
18 * スコード中に含まれていること.
19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
20 * 用できる形で再é…
21å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
22å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
23 * 者
24マニュアルなど)に,上記の著作権表示,この利用条件および下記
25 * の無保証規定を掲載すること.
26 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
27 * 用できない形で再é…
28å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
29 * と.
30 * (a) 再é…
31å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
32マニュアルなど)に,上記の著
33 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
34 * (b) 再é…
35å¸ƒã®å½¢æ…
36‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
37 * 報告すること.
38 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
39 * 害からも,上記著作権者
40およびTOPPERSプロジェクトをå…
41è²¬ã™ã‚‹ã“と.
42 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
43 * 由に基づく請求からも,上記著作権者
44およびTOPPERSプロジェクトを
45 * å…
46è²¬ã™ã‚‹ã“と.
47 *
48 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
49お
50 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
51 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
52 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
53 * の責任を負わない.
54 *
55 * $Id: task.h 452 2015-08-15 02:36:39Z ertl-hiro $
56 */
57
58/*
59 * タスク管理モジュール
60 */
61
62#ifndef TOPPERS_TASK_H
63#define TOPPERS_TASK_H
64
65#include "kernel_impl.h"
66#include <queue.h>
67#include "time_event.h"
68
69/*
70 * トレースログマクロのデフォルト定義
71 */
72#ifndef LOG_TSKSTAT
73#define LOG_TSKSTAT(p_tcb)
74#endif /* LOG_TSKSTAT */
75
76/*
77 * タスク優å…
78ˆåº¦ã®å†…
79部表現・外部表現変換マクロ
80 */
81#define INT_PRIORITY(x) ((uint_t)((x) - TMIN_TPRI))
82#define EXT_TSKPRI(x) ((PRI)(x) + TMIN_TPRI)
83
84/*
85 * タスク状æ…
86‹ã®å†…
87部表現
88 *
89 * TCB中のタスク状æ…
90‹ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã§ã¯ï¼Œã‚¿ã‚¹ã‚¯ã®çŠ¶æ…
91‹ã¨ï¼Œã‚¿ã‚¹ã‚¯ãŒå¾…
92ち状æ…
93‹
94 * の時の待
95ち要因を表す.ただし,実行状æ…
96‹ï¼ˆRUNNING)と実行可能状æ…
97‹
98 * (READY)は区別せず,両状æ…
99‹ã‚’あわせて実行できる状æ…
100‹ï¼ˆRUNNABLE)とし
101 * て管理する.二重待
102ち状æ…
103‹ã¯ï¼Œ(TS_WAITING_??? | TS_SUSPENDED)で表す.
104 *
105 * タスクが待
106ち状æ…
107‹ï¼ˆäºŒé‡å¾…
108ち状æ…
109‹ã‚’含む)の時は,TS_WAITING_???で待
110ち
111 * 要因を表す.待
112ち要因(5ビットで表現される)の上位2ビットで,同期・
113 * 通信オブジェクトの待
114ちキューにつながっているかどうかを表す.同期・
115 * 通信オブジェクトの待
116ちキューにつながらないものは上位2ビットを00,同
117 * 期・通信オブジェクトの管理ブロックのå…
118±é€šéƒ¨åˆ†ï¼ˆWOBJCB)の待
119ちキュー
120 * につながるものは10または11,それ以外の待
121ちキューにつながるものは01
122 * とする.
123 */
124#define TS_DORMANT 0x00U /* 休止状æ…
125‹ */
126#define TS_RUNNABLE 0x01U /* 実行できる状æ…
127‹ */
128#define TS_SUSPENDED 0x02U /* 強制待
129ち状æ…
130‹ */
131
132#define TS_WAITING_SLP (0x01U << 2) /* 起床待
133ち */
134#define TS_WAITING_DLY (0x02U << 2) /* 時間経過待
135ち */
136#define TS_WAITING_RDTQ (0x08U << 2) /* データキューからの受信待
137ち */
138#define TS_WAITING_RPDQ (0x09U << 2) /* 優å…
139ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ã‹ã‚‰ã®å—ä¿¡å¾…
140ち */
141#define TS_WAITING_RMBF (0x0aU << 2) /* メッセージバッファからの受信待
142ち */
143#define TS_WAITING_SEM (0x10U << 2) /* セマフォ資源の獲得待
144ち */
145#define TS_WAITING_FLG (0x11U << 2) /* イベントフラグ待
146ち */
147#define TS_WAITING_SDTQ (0x12U << 2) /* データキューへの送信待
148ち */
149#define TS_WAITING_SPDQ (0x13U << 2) /* 優å…
150ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ã¸ã®é€ä¿¡å¾…
151ち */
152#define TS_WAITING_MTX (0x14U << 2) /* ミューテックスのロック待
153ち */
154#define TS_WAITING_SMBF (0x15U << 2) /* メッセージバッファへの送信待
155ち */
156#define TS_WAITING_MPF (0x16U << 2) /* 固定長メモリブロックの獲得待
157ち */
158
159#define TS_WAITING_MASK (0x1fU << 2) /* 待
160ち状æ…
161‹ã®åˆ¤åˆ¥ç”¨ãƒžã‚¹ã‚¯ */
162
163/*
164 * タスク状æ…
165‹åˆ¤åˆ¥ãƒžã‚¯ãƒ­
166 *
167 * TSTAT_DORMANTはタスクが休止状æ…
168‹ã§ã‚るかどうかを,TSTAT_RUNNABLEは
169 * タスクが実行できる状æ…
170‹ã§ã‚るかどうかを判別する.TSTAT_WAITINGは待
171
172 * ち状æ…
173‹ã¨äºŒé‡å¾…
174ち状æ…
175‹ã®ã„ずれかであるかどうかを,TSTAT_SUSPENDEDは
176 * 強制待
177ち状æ…
178‹ã¨äºŒé‡å¾…
179ち状æ…
180‹ã®ã„ずれかであるかどうかを判別する.
181 */
182#define TSTAT_DORMANT(tstat) ((tstat) == TS_DORMANT)
183#define TSTAT_RUNNABLE(tstat) (((tstat) & TS_RUNNABLE) != 0U)
184#define TSTAT_WAITING(tstat) (((tstat) & TS_WAITING_MASK) != 0U)
185#define TSTAT_SUSPENDED(tstat) (((tstat) & TS_SUSPENDED) != 0U)
186
187/*
188 * タスク待
189ち要因判別マクロ
190 *
191 * TSTAT_WAIT_SLPはタスクが起床待
192ちであるかどうかを,TSTAT_WAIT_MTXは
193 * タスクがミューテックス待
194ちであるかどうかを判別する.
195 *
196 * また,TSTAT_WAIT_WOBJ はタスクが同期・通信オブジェクトに対する待
197ち
198 * であるか(言い換えると,同期・通信オブジェクトの待
199ちキューにつなが
200 * れているか)どうかを,TSTAT_WAIT_WOBJCBはタスクが同期・通信オブジェ
201 * クトの管理ブロックのå…
202±é€šéƒ¨åˆ†ï¼ˆWOBJCB)の待
203ちキューにつながれている
204 * かどうかを判別する.
205 */
206#define TSTAT_WAIT_SLP(tstat) (((tstat) & ~TS_SUSPENDED) == TS_WAITING_SLP)
207#define TSTAT_WAIT_MTX(tstat) (((tstat) & ~TS_SUSPENDED) == TS_WAITING_MTX)
208#define TSTAT_WAIT_SMBF(tstat) (((tstat) & ~TS_SUSPENDED) == TS_WAITING_SMBF)
209
210#define TSTAT_WAIT_WOBJ(tstat) (((tstat) & (0x18U << 2)) != 0U)
211#define TSTAT_WAIT_WOBJCB(tstat) (((tstat) & (0x10U << 2)) != 0U)
212
213/*
214 * 待
215ち情
216報ブロック(WINFO)の定義
217 *
218 * タスクが待
219ち状æ…
220‹ã®é–“は,TCBおよびそのp_winfoで指されるWINFOを次の
221 * ように設定しなければならない.
222 *
223 * (a) TCBのタスク状æ…
224‹ã‚’å¾…
225ち状æ…
226‹ï¼ˆTS_WAITING_???)にする.
227 *
228 * (b) タイムアウトを監視するために,タイムイベントブロックを登録する.
229 * 登録するタイムイベントブロックは,待
230ちにå…
231¥ã‚‹ã‚µãƒ¼ãƒ“スコール処理関数
232 * のローカル変数として確保し,それへのポインタをWINFOのp_tmevtbに記
233 * 憶する.タイムアウトの監視が必
234要ない場合(永久
235待
236ちの場合)には,
237 * p_tmevtbをNULLにする.
238 *
239 * 同期・通信オブジェクトに対する待
240ち状æ…
241‹ã®å ´åˆã«ã¯ï¼Œæ¨™æº–のWINFOに
242 * p_wobjcbフィールドを追加した構造体(WINFO_WOBJ,wait.hで定義)に,
243 * 待
244ち対象の同期・通信オブジェクトに依存して記憶することが必
245要な情
246å ±
247 * のためのフィールドを追加した構造体(WINFO_???)を定義し,WINFOの代
248 * わりに用いる.また,以下の(c)〜(e)の設定を行う必
249要がある.同期・通
250 * 信オブジェクトに関係しない待
251ち(起床待
252ち,時間経過待
253ち)の場合には,
254 * これらは必
255要ない.
256 *
257 * (c) TCBを待
258ち対象の同期・通信オブジェクトの待
259ちキューにつなぐ.待
260
261 * ちキューにつなぐために,task_queueを使う.
262 *
263 * (d) 待
264ち対象の同期・通信オブジェクトの管理ブロックへのポインタを,
265 * WINFO_WOBJのp_wobjcbに記憶する.
266 *
267 * (e) 待
268ち対象の同期・通信オブジェクトに依存して記憶することが必
269要な
270 * 情
271報がある場合には,WINFO_???内
272のフィールドに記憶する.
273 *
274 * 待
275ち状æ…
276‹ã‚’解除する際には,待
277ち解除したタスクに対する返値をWINFOの
278 * wercdに設定する.wercdが必
279要なのは待
280ち解除以降であるのに対して,
281 * p_tmevtbは待
282ち解除後は必
283要ないため,メモリ節約のためにå…
284±ç”¨ä½“を使っ
285 * ている.そのため,wercdへエラーコードを設定するのは,タイムイベント
286 * ブロックを登録解除した後にしなければならない.
287 */
288typedef union waiting_information {
289 ER wercd; /* 待
290ち解除時のエラーコード */
291 TMEVTB *p_tmevtb; /* 待
292ち状æ…
293‹ç”¨ã®ã‚¿ã‚¤ãƒ ã‚¤ãƒ™ãƒ³ãƒˆãƒ–ロック */
294} WINFO;
295
296/*
297 * ミューテックス管理ブロックの型の前方参ç…
298§
299 */
300typedef struct mutex_control_block MTXCB;
301
302/*
303 * タスク初期化ブロック
304 *
305 * タスクに関する情
306報を,値が変わらないためにROMに置ける部分(タスク
307 * 初期化ブロック)と,値が変化するためにRAMに置かなければならない部
308 * 分(タスク管理ブロック,TCB)に分離し,TCB内
309に対応するタスク初期化
310 * ブロックを指すポインタをå…
311¥ã‚Œã‚‹ï¼Žã‚¿ã‚¹ã‚¯åˆæœŸåŒ–ブロック内
312に対応する
313 * TCBを指すポインタをå…
314¥ã‚Œã‚‹æ–¹æ³•ã®æ–¹ãŒï¼ŒRAMの節約の観点からは望ましい
315 * が,実行効率が悪くなるために採用していない.他のオブジェクトについ
316 * ても同様に扱う.
317 */
318typedef struct task_initialization_block {
319 ATR tskatr; /* タスク属性 */
320 intptr_t exinf; /* タスクの拡張情
321å ± */
322 TASK task; /* タスクの起動番地 */
323 uint_t ipriority; /* タスクの起動時優å…
324ˆåº¦ï¼ˆå†…
325部表現) */
326
327#ifdef USE_TSKINICTXB
328 TSKINICTXB tskinictxb; /* タスク初期化コンテキストブロック */
329#else /* USE_TSKINICTXB */
330 size_t stksz; /* スタック領域のサイズ(丸めた値) */
331 void *stk; /* スタック領域のå…
332ˆé ­ç•ªåœ° */
333#endif /* USE_TSKINICTXB */
334} TINIB;
335
336/*
337 * タスク管理ブロック(TCB)
338 *
339 * ASPカーネルでは,タスクの起動要求キューイング数の最大値(TMAX_ACTCNT)
340 * と起床要求キューイング数の最大値(TMAX_WUPCNT)は1に固定されている
341 * ため,キューイングされているかどうかの真偽値で表現することができる.
342 * また,強制待
343ち要求ネスト数の最大値(TMAX_SUSCNT)が1に固定されてい
344 * るので,強制待
345ち要求ネスト数(suscnt)は必
346要ない.
347 *
348 * TCBのいくつかのフィールドは,特定のタスク状æ…
349‹ã§ã®ã¿æœ‰åŠ¹ãªå€¤ã‚’保持し,
350 * それ以外の場合は値が保証されない(よって,参ç…
351§ã—てはならない).各
352 * フィールドが有効な値を保持する条件は次の通り.
353 *
354 * ・初期化後は常に有効:
355 * p_tinib,tstat,actque
356 * ・休止状æ…
357‹ä»¥å¤–で有効(休止状æ…
358‹ã§ã¯åˆæœŸå€¤ã«ãªã£ã¦ã„る):
359 * bpriority,priority,wupque,raster,enater,p_lastmtx
360 * ・待
361ち状æ…
362‹ï¼ˆäºŒé‡å¾…
363ち状æ…
364‹ã‚’含む)で有効:
365 * p_winfo
366 * ・実行できる状æ…
367‹ã¨åŒæœŸãƒ»é€šä¿¡ã‚ªãƒ–ジェクトに対する待
368ち状æ…
369‹ã§æœ‰åŠ¹ï¼š
370 * task_queue
371 * ・実行可能状æ…
372‹ï¼Œå¾…
373ち状æ…
374‹ï¼Œå¼·åˆ¶å¾…
375ち状æ…
376‹ï¼ŒäºŒé‡å¾…
377ち状æ…
378‹ã§æœ‰åŠ¹ï¼š
379 * tskctxb
380 */
381typedef struct task_control_block {
382 QUEUE task_queue; /* タスクキュー */
383 const TINIB *p_tinib; /* 初期化ブロックへのポインタ */
384
385#ifdef UINT8_MAX
386 uint8_t tstat; /* タスク状æ…
387‹ï¼ˆå†…
388部表現)*/
389 uint8_t bpriority; /* ベース優å…
390ˆåº¦ï¼ˆå†…
391部表現)*/
392 uint8_t priority; /* 現在の優å…
393ˆåº¦ï¼ˆå†…
394部表現)*/
395#else /* UINT8_MAX */
396 BIT_FIELD_UINT tstat : 8; /* タスク状æ…
397‹ï¼ˆå†…
398部表現)*/
399 BIT_FIELD_UINT bpriority : 8; /* ベース優å…
400ˆåº¦ï¼ˆå†…
401部表現)*/
402 BIT_FIELD_UINT priority : 8 /* 現在の優å…
403ˆåº¦ï¼ˆå†…
404部表現)*/;
405#endif /* UINT8_MAX */
406 BIT_FIELD_BOOL actque : 1; /* 起動要求キューイング */
407 BIT_FIELD_BOOL wupque : 1; /* 起床要求キューイング */
408 BIT_FIELD_BOOL raster : 1; /* タスク終了要求状æ…
409‹ */
410 BIT_FIELD_BOOL enater : 1; /* タスク終了許可状æ…
411‹ */
412
413 WINFO *p_winfo; /* 待
414ち情
415報ブロックへのポインタ */
416 MTXCB *p_lastmtx; /* 最後にロックしたミューテックス */
417 TSKCTXB tskctxb; /* タスクコンテキストブロック */
418} TCB;
419
420/*
421 * 実行状æ…
422‹ã®ã‚¿ã‚¹ã‚¯
423 *
424 * 実行状æ…
425‹ã®ã‚¿ã‚¹ã‚¯ï¼ˆï¼ãƒ—ロセッサがコンテキストを持っているタスク)の
426 * TCBを指すポインタ.実行状æ…
427‹ã®ã‚¿ã‚¹ã‚¯ãŒãªã„場合はNULLにする.
428 *
429 * サービスコールの処理中で,自タスク(サービスコールを呼び出したタス
430 * ク)に関する情
431報を参ç…
432§ã™ã‚‹å ´åˆã¯p_runtskを使う.p_runtskを書き換え
433 * るのは,ディスパッチャ(と初期化処理)のみである.
434 */
435extern TCB *p_runtsk;
436
437/*
438 * 実行すべきタスク
439 *
440 * 実行すべきタスクのTCBを指すポインタ.実行できるタスクがない場合は
441 * NULLにする.
442 *
443 * p_runtskは,通常はp_schedtskと一致しているが,非タスクコンテキスト
444 * 実行中は,一致しているとは限らない.割込み優å…
445ˆåº¦ãƒžã‚¹ã‚¯å…
446¨è§£é™¤ã§ãªã„
447 * 状æ…
448‹ã®é–“とディスパッチ禁止状æ…
449‹ã®é–“(すなわち,dspflgがfalseである間)
450 * は,p_schedtskを更新しない.
451 */
452extern TCB *p_schedtsk;
453
454/*
455 * ディスパッチ許可状æ…
456‹
457 *
458 * ディスパッチ許可状æ…
459‹ã§ã‚ることを示すフラグ.
460 */
461extern bool_t enadsp;
462
463/*
464 * タスクディスパッチ可能状æ…
465‹
466 *
467 * 割込み優å…
468ˆåº¦ãƒžã‚¹ã‚¯å…
469¨è§£é™¤çŠ¶æ…
470‹ã§ã‚り,ディスパッチ許可状æ…
471‹ã§ã‚る(ディ
472 * スパッチ禁止状æ…
473‹ã§ãªã„)ことを示すフラグ.ディスパッチ保留状æ…
474‹ã§ãª
475 * いことは,タスクコンテキスト実行中で,CPUロック状æ…
476‹ã§ãªãï¼Œdspflgが
477 * trueであることで判別することができる.
478 */
479extern bool_t dspflg;
480
481/*
482 * レディキュー
483 *
484 * レディキューは,実行できる状æ…
485‹ã®ã‚¿ã‚¹ã‚¯ã‚’管理するためのキューである.
486 * 実行状æ…
487‹ã®ã‚¿ã‚¹ã‚¯ã‚‚管理しているため,レディ(実行可能)キューという
488 * 名称は正確ではないが,レディキューという名称が定着しているため,こ
489 * の名称で呼ぶことにする.
490 *
491 * レディキューは,優å…
492ˆåº¦ã”とのタスクキューで構成されている.タスクの
493 * TCBは,該当する優å…
494ˆåº¦ã®ã‚­ãƒ¥ãƒ¼ã«ç™»éŒ²ã•ã‚Œã‚‹ï¼Ž
495 */
496extern QUEUE ready_queue[TNUM_TPRI];
497
498/*
499 * レディキューサーチのためのビットマップ
500 *
501 * レディキューのサーチを効率よく行うために,優å…
502ˆåº¦ã”とのタスクキュー
503 * にタスクがå…
504¥ã£ã¦ã„るかどうかを示すビットマップを用意している.ビッ
505 * トマップを使うことで,メモリアクセスの回数を減らすことができるが,
506 * ビット操作命令がå…
507…
508実していないプロセッサで,優å…
509ˆåº¦ã®æ®µéšŽæ•°ãŒå°‘ない
510 * 場合には,ビットマップ操作のオーバーヘッドのために,逆に効率が落ち
511 * る可能性もある.
512 *
513 * 優å…
514ˆåº¦ãŒ16段階であることを仮定しているため,uint16_t型としている.
515 */
516extern uint16_t ready_primap;
517
518/*
519 * タスクIDの最大値(kernel_cfg.c)
520 */
521extern const ID tmax_tskid;
522
523/*
524 * タスク初期化ブロックのエリア(kernel_cfg.c)
525 */
526extern const TINIB tinib_table[];
527
528/*
529 * タスク生成順序テーブル(kernel_cfg.c)
530 */
531extern const ID torder_table[];
532
533/*
534 * TCBのエリア(kernel_cfg.c)
535 */
536extern TCB tcb_table[];
537
538/*
539 * タスクの数
540 */
541#define tnum_tsk ((uint_t)(tmax_tskid - TMIN_TSKID + 1))
542
543/*
544 * タスクIDからTCBを取り出すためのマクロ
545 */
546#define INDEX_TSK(tskid) ((uint_t)((tskid) - TMIN_TSKID))
547#define get_tcb(tskid) (&(tcb_table[INDEX_TSK(tskid)]))
548
549/*
550 * TCBからタスクIDを取り出すためのマクロ
551 */
552#define TSKID(p_tcb) ((ID)(((p_tcb) - tcb_table) + TMIN_TSKID))
553
554/*
555 * タスク管理モジュールの初期化
556 */
557extern void initialize_task(void);
558
559/*
560 * 最高優å…
561ˆé †ä½ã‚¿ã‚¹ã‚¯ã®ã‚µãƒ¼ãƒ
562 *
563 * レディキュー中の最高優å…
564ˆé †ä½ã®ã‚¿ã‚¹ã‚¯ã‚’サーチし,そのTCBへのポインタ
565 * を返す.レディキューが空の場合には,この関数を呼び出してはならない.
566 */
567extern TCB *search_schedtsk(void);
568
569/*
570 * 実行できる状æ…
571‹ã¸ã®é·ç§»
572 *
573 * p_tcbで指定されるタスクをレディキューに挿å…
574¥ã™ã‚‹ï¼Žãƒ¬ãƒ‡ã‚£ã‚­ãƒ¥ãƒ¼ã«æŒ¿å…
575¥
576 * したタスクの優å…
577ˆåº¦ãŒï¼Œå®Ÿè¡Œã™ã¹ãã‚¿ã‚¹ã‚¯ã®å„ªå…
578ˆåº¦ã‚ˆã‚Šã‚‚高い場合は,実
579 * 行すべきタスクを更新する.
580 */
581extern void make_runnable(TCB *p_tcb);
582
583/*
584 * 実行できる状æ…
585‹ã‹ã‚‰ä»–の状æ…
586‹ã¸ã®é·ç§»
587 *
588 * p_tcbで指定されるタスクをレディキューから削除する.p_tcbで指定した
589 * タスクが実行すべきタスクであった場合には,実行すべきタスクを更新す
590 * る.
591 */
592extern void make_non_runnable(TCB *p_tcb);
593
594/*
595 * 休止状æ…
596‹ã¸ã®é·ç§»
597 *
598 * p_tcbで指定されるタスクの状æ…
599‹ã‚’休止状æ…
600‹ã¨ã™ã‚‹ï¼Žã¾ãŸï¼Œã‚¿ã‚¹ã‚¯ã®èµ·å‹•
601 * 時に初期化すべき変数の初期化と,タスク起動のためのコンテキストを設
602 * 定する.
603 */
604extern void make_dormant(TCB *p_tcb);
605
606/*
607 * 休止状æ…
608‹ã‹ã‚‰å®Ÿè¡Œã§ãã‚‹çŠ¶æ…
609‹ã¸ã®é·ç§»
610 *
611 * p_tcbで指定されるタスクの状æ…
612‹ã‚’休止状æ…
613‹ã‹ã‚‰å®Ÿè¡Œã§ãã‚‹çŠ¶æ…
614‹ã¨ã™ã‚‹ï¼Ž
615 */
616extern void make_active(TCB *p_tcb);
617
618/*
619 * タスクの優å…
620ˆåº¦ã®å¤‰æ›´
621 *
622 * p_tcbで指定されるタスクの優å…
623ˆåº¦ã‚’newpri(内
624部表現)に変更する.また,
625 * 必
626要な場合には,実行すべきタスクを更新する.
627 *
628 * p_tcbで指定されるタスクの優å…
629ˆé †ä½ã¯ï¼Œå„ªå…
630ˆåº¦ãŒåŒã˜ã‚¿ã‚¹ã‚¯ã®ä¸­ã§ï¼Œ
631 * mtxmodeがfalseの時は最低,mtxmodeがtrueの時は最高とする.
632 */
633extern void change_priority(TCB *p_tcb, uint_t newpri, bool_t mtxmode);
634
635/*
636 * レディキューの回転
637 *
638 * レディキュー中の,p_queueで指定されるタスクキューを回転させる.また,
639 * 必
640要な場合には,実行すべきタスクを更新する.
641 */
642extern void rotate_ready_queue(QUEUE *p_queue);
643
644/*
645 * タスクの終了処理
646 *
647 * p_tcbで指定されるタスクを終了させる処理を行う.タスクの起動要求キュー
648 * イング数が0でない場合には,再度起動するための処理を行う.
649 */
650extern void task_terminate(TCB *p_tcb);
651
652#endif /* TOPPERS_TASK_H */
Note: See TracBrowser for help on using the repository browser.