source: asp3_wo_tecs/trunk/extension/ovrhdr/kernel/task.h@ 306

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

3.1.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 458 2015-08-21 14:59:09Z 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_SEM (0x10U << 2) /* セマフォ資源の獲得待
142ち */
143#define TS_WAITING_FLG (0x11U << 2) /* イベントフラグ待
144ち */
145#define TS_WAITING_SDTQ (0x12U << 2) /* データキューへの送信待
146ち */
147#define TS_WAITING_SPDQ (0x13U << 2) /* 優å…
148ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ã¸ã®é€ä¿¡å¾…
149ち */
150#define TS_WAITING_MTX (0x14U << 2) /* ミューテックスのロック待
151ち */
152#define TS_WAITING_MPF (0x15U << 2) /* 固定長メモリブロックの獲得待
153ち */
154
155#define TS_WAITING_MASK (0x1fU << 2) /* 待
156ち状æ…
157‹ã®åˆ¤åˆ¥ç”¨ãƒžã‚¹ã‚¯ */
158
159/*
160 * タスク状æ…
161‹åˆ¤åˆ¥ãƒžã‚¯ãƒ­
162 *
163 * TSTAT_DORMANTはタスクが休止状æ…
164‹ã§ã‚るかどうかを,TSTAT_RUNNABLEは
165 * タスクが実行できる状æ…
166‹ã§ã‚るかどうかを判別する.TSTAT_WAITINGは待
167
168 * ち状æ…
169‹ã¨äºŒé‡å¾…
170ち状æ…
171‹ã®ã„ずれかであるかどうかを,TSTAT_SUSPENDEDは
172 * 強制待
173ち状æ…
174‹ã¨äºŒé‡å¾…
175ち状æ…
176‹ã®ã„ずれかであるかどうかを判別する.
177 */
178#define TSTAT_DORMANT(tstat) ((tstat) == TS_DORMANT)
179#define TSTAT_RUNNABLE(tstat) (((tstat) & TS_RUNNABLE) != 0U)
180#define TSTAT_WAITING(tstat) (((tstat) & TS_WAITING_MASK) != 0U)
181#define TSTAT_SUSPENDED(tstat) (((tstat) & TS_SUSPENDED) != 0U)
182
183/*
184 * タスク待
185ち要因判別マクロ
186 *
187 * TSTAT_WAIT_SLPはタスクが起床待
188ちであるかどうかを,TSTAT_WAIT_MTXは
189 * タスクがミューテックス待
190ちであるかどうかを判別する.
191 *
192 * また,TSTAT_WAIT_WOBJ はタスクが同期・通信オブジェクトに対する待
193ち
194 * であるか(言い換えると,同期・通信オブジェクトの待
195ちキューにつなが
196 * れているか)どうかを,TSTAT_WAIT_WOBJCBはタスクが同期・通信オブジェ
197 * クトの管理ブロックのå…
198±é€šéƒ¨åˆ†ï¼ˆWOBJCB)の待
199ちキューにつながれている
200 * かどうかを判別する.
201 */
202#define TSTAT_WAIT_SLP(tstat) (((tstat) & ~TS_SUSPENDED) == TS_WAITING_SLP)
203#define TSTAT_WAIT_MTX(tstat) (((tstat) & ~TS_SUSPENDED) == TS_WAITING_MTX)
204
205#define TSTAT_WAIT_WOBJ(tstat) (((tstat) & (0x18U << 2)) != 0U)
206#define TSTAT_WAIT_WOBJCB(tstat) (((tstat) & (0x10U << 2)) != 0U)
207
208/*
209 * 待
210ち情
211報ブロック(WINFO)の定義
212 *
213 * タスクが待
214ち状æ…
215‹ã®é–“は,TCBおよびそのp_winfoで指されるWINFOを次の
216 * ように設定しなければならない.
217 *
218 * (a) TCBのタスク状æ…
219‹ã‚’å¾…
220ち状æ…
221‹ï¼ˆTS_WAITING_???)にする.
222 *
223 * (b) タイムアウトを監視するために,タイムイベントブロックを登録する.
224 * 登録するタイムイベントブロックは,待
225ちにå…
226¥ã‚‹ã‚µãƒ¼ãƒ“スコール処理関数
227 * のローカル変数として確保し,それへのポインタをWINFOのp_tmevtbに記
228 * 憶する.タイムアウトの監視が必
229要ない場合(永久
230待
231ちの場合)には,
232 * p_tmevtbをNULLにする.
233 *
234 * 同期・通信オブジェクトに対する待
235ち状æ…
236‹ã®å ´åˆã«ã¯ï¼Œæ¨™æº–のWINFOに
237 * p_wobjcbフィールドを追加した構造体(WINFO_WOBJ,wait.hで定義)に,
238 * 待
239ち対象の同期・通信オブジェクトに依存して記憶することが必
240要な情
241å ±
242 * のためのフィールドを追加した構造体(WINFO_???)を定義し,WINFOの代
243 * わりに用いる.また,以下の(c)〜(e)の設定を行う必
244要がある.同期・通
245 * 信オブジェクトに関係しない待
246ち(起床待
247ち,時間経過待
248ち)の場合には,
249 * これらは必
250要ない.
251 *
252 * (c) TCBを待
253ち対象の同期・通信オブジェクトの待
254ちキューにつなぐ.待
255
256 * ちキューにつなぐために,task_queueを使う.
257 *
258 * (d) 待
259ち対象の同期・通信オブジェクトの管理ブロックへのポインタを,
260 * WINFO_WOBJのp_wobjcbに記憶する.
261 *
262 * (e) 待
263ち対象の同期・通信オブジェクトに依存して記憶することが必
264要な
265 * 情
266報がある場合には,WINFO_???内
267のフィールドに記憶する.
268 *
269 * 待
270ち状æ…
271‹ã‚’解除する際には,待
272ち解除したタスクに対する返値をWINFOの
273 * wercdに設定する.wercdが必
274要なのは待
275ち解除以降であるのに対して,
276 * p_tmevtbは待
277ち解除後は必
278要ないため,メモリ節約のためにå…
279±ç”¨ä½“を使っ
280 * ている.そのため,wercdへエラーコードを設定するのは,タイムイベント
281 * ブロックを登録解除した後にしなければならない.
282 */
283typedef union waiting_information {
284 ER wercd; /* 待
285ち解除時のエラーコード */
286 TMEVTB *p_tmevtb; /* 待
287ち状æ…
288‹ç”¨ã®ã‚¿ã‚¤ãƒ ã‚¤ãƒ™ãƒ³ãƒˆãƒ–ロック */
289} WINFO;
290
291/*
292 * ミューテックス管理ブロックの型の前方参ç…
293§
294 */
295typedef struct mutex_control_block MTXCB;
296
297/*
298 * タスク初期化ブロック
299 *
300 * タスクに関する情
301報を,値が変わらないためにROMに置ける部分(タスク
302 * 初期化ブロック)と,値が変化するためにRAMに置かなければならない部
303 * 分(タスク管理ブロック,TCB)に分離し,TCB内
304に対応するタスク初期化
305 * ブロックを指すポインタをå…
306¥ã‚Œã‚‹ï¼Žã‚¿ã‚¹ã‚¯åˆæœŸåŒ–ブロック内
307に対応する
308 * TCBを指すポインタをå…
309¥ã‚Œã‚‹æ–¹æ³•ã®æ–¹ãŒï¼ŒRAMの節約の観点からは望ましい
310 * が,実行効率が悪くなるために採用していない.他のオブジェクトについ
311 * ても同様に扱う.
312 */
313typedef struct task_initialization_block {
314 ATR tskatr; /* タスク属性 */
315 intptr_t exinf; /* タスクの拡張情
316å ± */
317 TASK task; /* タスクの起動番地 */
318 uint_t ipriority; /* タスクの起動時優å…
319ˆåº¦ï¼ˆå†…
320部表現) */
321
322#ifdef USE_TSKINICTXB
323 TSKINICTXB tskinictxb; /* タスク初期化コンテキストブロック */
324#else /* USE_TSKINICTXB */
325 size_t stksz; /* スタック領域のサイズ(丸めた値) */
326 void *stk; /* スタック領域のå…
327ˆé ­ç•ªåœ° */
328#endif /* USE_TSKINICTXB */
329} TINIB;
330
331/*
332 * タスク管理ブロック(TCB)
333 *
334 * ASPカーネルでは,タスクの起動要求キューイング数の最大値(TMAX_ACTCNT)
335 * と起床要求キューイング数の最大値(TMAX_WUPCNT)は1に固定されている
336 * ため,キューイングされているかどうかの真偽値で表現することができる.
337 * また,強制待
338ち要求ネスト数の最大値(TMAX_SUSCNT)が1に固定されてい
339 * るので,強制待
340ち要求ネスト数(suscnt)は必
341要ない.
342 *
343 * TCBのいくつかのフィールドは,特定のタスク状æ…
344‹ã§ã®ã¿æœ‰åŠ¹ãªå€¤ã‚’保持し,
345 * それ以外の場合は値が保証されない(よって,参ç…
346§ã—てはならない).各
347 * フィールドが有効な値を保持する条件は次の通り.
348 *
349 * ・初期化後は常に有効:
350 * p_tinib,tstat,actque, staovr, leftotm
351 * ・休止状æ…
352‹ä»¥å¤–で有効(休止状æ…
353‹ã§ã¯åˆæœŸå€¤ã«ãªã£ã¦ã„る):
354 * bpriority,priority,wupque,raster,enater,p_lastmtx
355 * ・待
356ち状æ…
357‹ï¼ˆäºŒé‡å¾…
358ち状æ…
359‹ã‚’含む)で有効:
360 * p_winfo
361 * ・実行できる状æ…
362‹ã¨åŒæœŸãƒ»é€šä¿¡ã‚ªãƒ–ジェクトに対する待
363ち状æ…
364‹ã§æœ‰åŠ¹ï¼š
365 * task_queue
366 * ・実行可能状æ…
367‹ï¼Œå¾…
368ち状æ…
369‹ï¼Œå¼·åˆ¶å¾…
370ち状æ…
371‹ï¼ŒäºŒé‡å¾…
372ち状æ…
373‹ã§æœ‰åŠ¹ï¼š
374 * tskctxb
375 */
376typedef struct task_control_block {
377 QUEUE task_queue; /* タスクキュー */
378 const TINIB *p_tinib; /* 初期化ブロックへのポインタ */
379
380#ifdef UINT8_MAX
381 uint8_t tstat; /* タスク状æ…
382‹ï¼ˆå†…
383部表現)*/
384 uint8_t bpriority; /* ベース優å…
385ˆåº¦ï¼ˆå†…
386部表現)*/
387 uint8_t priority; /* 現在の優å…
388ˆåº¦ï¼ˆå†…
389部表現)*/
390#else /* UINT8_MAX */
391 BIT_FIELD_UINT tstat : 8; /* タスク状æ…
392‹ï¼ˆå†…
393部表現)*/
394 BIT_FIELD_UINT bpriority : 8; /* ベース優å…
395ˆåº¦ï¼ˆå†…
396部表現)*/
397 BIT_FIELD_UINT priority : 8 /* 現在の優å…
398ˆåº¦ï¼ˆå†…
399部表現)*/;
400#endif /* UINT8_MAX */
401 BIT_FIELD_BOOL actque : 1; /* 起動要求キューイング */
402 BIT_FIELD_BOOL wupque : 1; /* 起床要求キューイング */
403 BIT_FIELD_BOOL raster : 1; /* タスク終了要求状æ…
404‹ */
405 BIT_FIELD_BOOL enater : 1; /* タスク終了許可状æ…
406‹ */
407#ifdef TOPPERS_SUPPORT_OVRHDR
408 BIT_FIELD_BOOL staovr : 1; /* オーバランハンドラ動作状æ…
409‹ */
410#endif /* TOPPERS_SUPPORT_OVRHDR */
411
412 WINFO *p_winfo; /* 待
413ち情
414報ブロックへのポインタ */
415 MTXCB *p_lastmtx; /* 最後にロックしたミューテックス */
416#ifdef TOPPERS_SUPPORT_OVRHDR
417 PRCTIM leftotm; /* 残りプロセッサ時間 */
418#endif /* TOPPERS_SUPPORT_OVRHDR */
419 TSKCTXB tskctxb; /* タスクコンテキストブロック */
420} TCB;
421
422/*
423 * 実行状æ…
424‹ã®ã‚¿ã‚¹ã‚¯
425 *
426 * 実行状æ…
427‹ã®ã‚¿ã‚¹ã‚¯ï¼ˆï¼ãƒ—ロセッサがコンテキストを持っているタスク)の
428 * TCBを指すポインタ.実行状æ…
429‹ã®ã‚¿ã‚¹ã‚¯ãŒãªã„場合はNULLにする.
430 *
431 * サービスコールの処理中で,自タスク(サービスコールを呼び出したタス
432 * ク)に関する情
433報を参ç…
434§ã™ã‚‹å ´åˆã¯p_runtskを使う.p_runtskを書き換え
435 * るのは,ディスパッチャ(と初期化処理)のみである.
436 */
437extern TCB *p_runtsk;
438
439/*
440 * 実行すべきタスク
441 *
442 * 実行すべきタスクのTCBを指すポインタ.実行できるタスクがない場合は
443 * NULLにする.
444 *
445 * p_runtskは,通常はp_schedtskと一致しているが,非タスクコンテキスト
446 * 実行中は,一致しているとは限らない.割込み優å…
447ˆåº¦ãƒžã‚¹ã‚¯å…
448¨è§£é™¤ã§ãªã„
449 * 状æ…
450‹ã®é–“とディスパッチ禁止状æ…
451‹ã®é–“(すなわち,dspflgがfalseである間)
452 * は,p_schedtskを更新しない.
453 */
454extern TCB *p_schedtsk;
455
456/*
457 * ディスパッチ許可状æ…
458‹
459 *
460 * ディスパッチ許可状æ…
461‹ã§ã‚ることを示すフラグ.
462 */
463extern bool_t enadsp;
464
465/*
466 * タスクディスパッチ可能状æ…
467‹
468 *
469 * 割込み優å…
470ˆåº¦ãƒžã‚¹ã‚¯å…
471¨è§£é™¤çŠ¶æ…
472‹ã§ã‚り,ディスパッチ許可状æ…
473‹ã§ã‚る(ディ
474 * スパッチ禁止状æ…
475‹ã§ãªã„)ことを示すフラグ.ディスパッチ保留状æ…
476‹ã§ãª
477 * いことは,タスクコンテキスト実行中で,CPUロック状æ…
478‹ã§ãªãï¼Œdspflgが
479 * trueであることで判別することができる.
480 */
481extern bool_t dspflg;
482
483/*
484 * レディキュー
485 *
486 * レディキューは,実行できる状æ…
487‹ã®ã‚¿ã‚¹ã‚¯ã‚’管理するためのキューである.
488 * 実行状æ…
489‹ã®ã‚¿ã‚¹ã‚¯ã‚‚管理しているため,レディ(実行可能)キューという
490 * 名称は正確ではないが,レディキューという名称が定着しているため,こ
491 * の名称で呼ぶことにする.
492 *
493 * レディキューは,優å…
494ˆåº¦ã”とのタスクキューで構成されている.タスクの
495 * TCBは,該当する優å…
496ˆåº¦ã®ã‚­ãƒ¥ãƒ¼ã«ç™»éŒ²ã•ã‚Œã‚‹ï¼Ž
497 */
498extern QUEUE ready_queue[TNUM_TPRI];
499
500/*
501 * レディキューサーチのためのビットマップ
502 *
503 * レディキューのサーチを効率よく行うために,優å…
504ˆåº¦ã”とのタスクキュー
505 * にタスクがå…
506¥ã£ã¦ã„るかどうかを示すビットマップを用意している.ビッ
507 * トマップを使うことで,メモリアクセスの回数を減らすことができるが,
508 * ビット操作命令がå…
509…
510実していないプロセッサで,優å…
511ˆåº¦ã®æ®µéšŽæ•°ãŒå°‘ない
512 * 場合には,ビットマップ操作のオーバーヘッドのために,逆に効率が落ち
513 * る可能性もある.
514 *
515 * 優å…
516ˆåº¦ãŒ16段階であることを仮定しているため,uint16_t型としている.
517 */
518extern uint16_t ready_primap;
519
520/*
521 * タスクIDの最大値(kernel_cfg.c)
522 */
523extern const ID tmax_tskid;
524
525/*
526 * タスク初期化ブロックのエリア(kernel_cfg.c)
527 */
528extern const TINIB tinib_table[];
529
530/*
531 * タスク生成順序テーブル(kernel_cfg.c)
532 */
533extern const ID torder_table[];
534
535/*
536 * TCBのエリア(kernel_cfg.c)
537 */
538extern TCB tcb_table[];
539
540/*
541 * タスクの数
542 */
543#define tnum_tsk ((uint_t)(tmax_tskid - TMIN_TSKID + 1))
544
545/*
546 * タスクIDからTCBを取り出すためのマクロ
547 */
548#define INDEX_TSK(tskid) ((uint_t)((tskid) - TMIN_TSKID))
549#define get_tcb(tskid) (&(tcb_table[INDEX_TSK(tskid)]))
550
551/*
552 * TCBからタスクIDを取り出すためのマクロ
553 */
554#define TSKID(p_tcb) ((ID)(((p_tcb) - tcb_table) + TMIN_TSKID))
555
556/*
557 * タスク管理モジュールの初期化
558 */
559extern void initialize_task(void);
560
561/*
562 * 最高優å…
563ˆé †ä½ã‚¿ã‚¹ã‚¯ã®ã‚µãƒ¼ãƒ
564 *
565 * レディキュー中の最高優å…
566ˆé †ä½ã®ã‚¿ã‚¹ã‚¯ã‚’サーチし,そのTCBへのポインタ
567 * を返す.レディキューが空の場合には,この関数を呼び出してはならない.
568 */
569extern TCB *search_schedtsk(void);
570
571/*
572 * 実行できる状æ…
573‹ã¸ã®é·ç§»
574 *
575 * p_tcbで指定されるタスクをレディキューに挿å…
576¥ã™ã‚‹ï¼Žãƒ¬ãƒ‡ã‚£ã‚­ãƒ¥ãƒ¼ã«æŒ¿å…
577¥
578 * したタスクの優å…
579ˆåº¦ãŒï¼Œå®Ÿè¡Œã™ã¹ãã‚¿ã‚¹ã‚¯ã®å„ªå…
580ˆåº¦ã‚ˆã‚Šã‚‚高い場合は,実
581 * 行すべきタスクを更新する.
582 */
583extern void make_runnable(TCB *p_tcb);
584
585/*
586 * 実行できる状æ…
587‹ã‹ã‚‰ä»–の状æ…
588‹ã¸ã®é·ç§»
589 *
590 * p_tcbで指定されるタスクをレディキューから削除する.p_tcbで指定した
591 * タスクが実行すべきタスクであった場合には,実行すべきタスクを更新す
592 * る.
593 */
594extern void make_non_runnable(TCB *p_tcb);
595
596/*
597 * 休止状æ…
598‹ã¸ã®é·ç§»
599 *
600 * p_tcbで指定されるタスクの状æ…
601‹ã‚’休止状æ…
602‹ã¨ã™ã‚‹ï¼Žã¾ãŸï¼Œã‚¿ã‚¹ã‚¯ã®èµ·å‹•
603 * 時に初期化すべき変数の初期化と,タスク起動のためのコンテキストを設
604 * 定する.
605 */
606extern void make_dormant(TCB *p_tcb);
607
608/*
609 * 休止状æ…
610‹ã‹ã‚‰å®Ÿè¡Œã§ãã‚‹çŠ¶æ…
611‹ã¸ã®é·ç§»
612 *
613 * p_tcbで指定されるタスクの状æ…
614‹ã‚’休止状æ…
615‹ã‹ã‚‰å®Ÿè¡Œã§ãã‚‹çŠ¶æ…
616‹ã¨ã™ã‚‹ï¼Ž
617 */
618extern void make_active(TCB *p_tcb);
619
620/*
621 * タスクの優å…
622ˆåº¦ã®å¤‰æ›´
623 *
624 * p_tcbで指定されるタスクの優å…
625ˆåº¦ã‚’newpri(内
626部表現)に変更する.また,
627 * 必
628要な場合には,実行すべきタスクを更新する.
629 *
630 * p_tcbで指定されるタスクの優å…
631ˆé †ä½ã¯ï¼Œå„ªå…
632ˆåº¦ãŒåŒã˜ã‚¿ã‚¹ã‚¯ã®ä¸­ã§ï¼Œ
633 * mtxmodeがfalseの時は最低,mtxmodeがtrueの時は最高とする.
634 */
635extern void change_priority(TCB *p_tcb, uint_t newpri, bool_t mtxmode);
636
637/*
638 * レディキューの回転
639 *
640 * レディキュー中の,p_queueで指定されるタスクキューを回転させる.また,
641 * 必
642要な場合には,実行すべきタスクを更新する.
643 */
644extern void rotate_ready_queue(QUEUE *p_queue);
645
646/*
647 * タスクの終了処理
648 *
649 * p_tcbで指定されるタスクを終了させる処理を行う.タスクの起動要求キュー
650 * イング数が0でない場合には,再度起動するための処理を行う.
651 */
652extern void task_terminate(TCB *p_tcb);
653
654#endif /* TOPPERS_TASK_H */
Note: See TracBrowser for help on using the repository browser.