source: asp3_gr_sakura/trunk/kernel/task.h@ 317

Last change on this file since 317 was 317, checked in by coas-nagasima, 7 years ago

GR-SAKURA向けASP3を追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-chdr
File size: 19.8 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 317 2017-08-03 13:14:26Z coas-nagasima $
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 *
313 * タスク初期化ブロックには,DEF_TEXで定義されるタスク例外処理ルーチ
314 * ンに関する情
315報も含む.
316 */
317typedef struct task_initialization_block {
318 ATR tskatr; /* タスク属性 */
319 intptr_t exinf; /* タスクの拡張情
320å ± */
321 TASK task; /* タスクの起動番地 */
322 uint_t ipriority; /* タスクの起動時優å…
323ˆåº¦ï¼ˆå†…
324部表現) */
325
326#ifdef USE_TSKINICTXB
327 TSKINICTXB tskinictxb; /* タスク初期化コンテキストブロック */
328#else /* USE_TSKINICTXB */
329 size_t stksz; /* スタック領域のサイズ(丸めた値) */
330 void *stk; /* スタック領域のå…
331ˆé ­ç•ªåœ° */
332#endif /* USE_TSKINICTXB */
333} TINIB;
334
335/*
336 * タスク管理ブロック(TCB)
337 *
338 * ASPカーネルでは,タスクの起動要求キューイング数の最大値(TMAX_ACTCNT)
339 * と起床要求キューイング数の最大値(TMAX_WUPCNT)は1に固定されている
340 * ため,キューイングされているかどうかの真偽値で表現することができる.
341 * また,強制待
342ち要求ネスト数の最大値(TMAX_SUSCNT)が1に固定されてい
343 * るので,強制待
344ち要求ネスト数(suscnt)は必
345要ない.
346 *
347 * TCBのいくつかのフィールドは,特定のタスク状æ…
348‹ã§ã®ã¿æœ‰åŠ¹ãªå€¤ã‚’保持し,
349 * それ以外の場合は値が保証されない(よって,参ç…
350§ã—てはならない).各
351 * フィールドが有効な値を保持する条件は次の通り.
352 *
353 * ・初期化後は常に有効:
354 * p_tinib,tstat,actque, staovr, leftotm
355 * ・休止状æ…
356‹ä»¥å¤–で有効(休止状æ…
357‹ã§ã¯åˆæœŸå€¤ã«ãªã£ã¦ã„る):
358 * bpriority,priority,wupque,raster,enater,p_lastmtx
359 * ・待
360ち状æ…
361‹ï¼ˆäºŒé‡å¾…
362ち状æ…
363‹ã‚’含む)で有効:
364 * p_winfo
365 * ・実行できる状æ…
366‹ã¨åŒæœŸãƒ»é€šä¿¡ã‚ªãƒ–ジェクトに対する待
367ち状æ…
368‹ã§æœ‰åŠ¹ï¼š
369 * task_queue
370 * ・実行可能状æ…
371‹ï¼Œå¾…
372ち状æ…
373‹ï¼Œå¼·åˆ¶å¾…
374ち状æ…
375‹ï¼ŒäºŒé‡å¾…
376ち状æ…
377‹ã§æœ‰åŠ¹ï¼š
378 * tskctxb
379 */
380typedef struct task_control_block {
381 QUEUE task_queue; /* タスクキュー */
382 const TINIB *p_tinib; /* 初期化ブロックへのポインタ */
383
384#ifdef UINT8_MAX
385 uint8_t tstat; /* タスク状æ…
386‹ï¼ˆå†…
387部表現)*/
388 uint8_t bpriority; /* ベース優å…
389ˆåº¦ï¼ˆå†…
390部表現)*/
391 uint8_t priority; /* 現在の優å…
392ˆåº¦ï¼ˆå†…
393部表現)*/
394#else /* UINT8_MAX */
395 BIT_FIELD_UINT tstat : 8; /* タスク状æ…
396‹ï¼ˆå†…
397部表現)*/
398 BIT_FIELD_UINT bpriority : 8; /* ベース優å…
399ˆåº¦ï¼ˆå†…
400部表現)*/
401 BIT_FIELD_UINT priority : 8 /* 現在の優å…
402ˆåº¦ï¼ˆå†…
403部表現)*/;
404#endif /* UINT8_MAX */
405 BIT_FIELD_BOOL actque : 1; /* 起動要求キューイング */
406 BIT_FIELD_BOOL wupque : 1; /* 起床要求キューイング */
407 BIT_FIELD_BOOL raster : 1; /* タスク終了要求状æ…
408‹ */
409 BIT_FIELD_BOOL enater : 1; /* タスク終了許可状æ…
410‹ */
411#ifdef TOPPERS_SUPPORT_OVRHDR
412 BIT_FIELD_BOOL staovr : 1; /* オーバランハンドラ動作状æ…
413‹ */
414#endif /* TOPPERS_SUPPORT_OVRHDR */
415
416 WINFO *p_winfo; /* 待
417ち情
418報ブロックへのポインタ */
419 MTXCB *p_lastmtx; /* 最後にロックしたミューテックス */
420#ifdef TOPPERS_SUPPORT_OVRHDR
421 PRCTIM leftotm; /* 残りプロセッサ時間 */
422#endif /* TOPPERS_SUPPORT_OVRHDR */
423 TSKCTXB tskctxb; /* タスクコンテキストブロック */
424} TCB;
425
426/*
427 * 実行状æ…
428‹ã®ã‚¿ã‚¹ã‚¯
429 *
430 * 実行状æ…
431‹ã®ã‚¿ã‚¹ã‚¯ï¼ˆï¼ãƒ—ロセッサがコンテキストを持っているタスク)の
432 * TCBを指すポインタ.実行状æ…
433‹ã®ã‚¿ã‚¹ã‚¯ãŒãªã„場合はNULLにする.
434 *
435 * サービスコールの処理中で,自タスク(サービスコールを呼び出したタス
436 * ク)に関する情
437報を参ç…
438§ã™ã‚‹å ´åˆã¯p_runtskを使う.p_runtskを書き換え
439 * るのは,ディスパッチャ(と初期化処理)のみである.
440 */
441extern TCB *p_runtsk;
442
443/*
444 * 実行すべきタスク
445 *
446 * 実行すべきタスクのTCBを指すポインタ.実行できるタスクがない場合は
447 * NULLにする.
448 *
449 * p_runtskは,通常はp_schedtskと一致しているが,非タスクコンテキスト
450 * 実行中は,一致しているとは限らない.割込み優å…
451ˆåº¦ãƒžã‚¹ã‚¯å…
452¨è§£é™¤ã§ãªã„
453 * 状æ…
454‹ã®é–“とディスパッチ禁止状æ…
455‹ã®é–“(すなわち,dspflgがfalseである間)
456 * は,p_schedtskを更新しない.
457 */
458extern TCB *p_schedtsk;
459
460/*
461 * ディスパッチ許可状æ…
462‹
463 *
464 * ディスパッチ許可状æ…
465‹ã§ã‚ることを示すフラグ.
466 */
467extern bool_t enadsp;
468
469/*
470 * タスクディスパッチ可能状æ…
471‹
472 *
473 * 割込み優å…
474ˆåº¦ãƒžã‚¹ã‚¯å…
475¨è§£é™¤çŠ¶æ…
476‹ã§ã‚り,ディスパッチ許可状æ…
477‹ã§ã‚る(ディ
478 * スパッチ禁止状æ…
479‹ã§ãªã„)ことを示すフラグ.ディスパッチ保留状æ…
480‹ã§ãª
481 * いことは,タスクコンテキスト実行中で,CPUロック状æ…
482‹ã§ãªãï¼Œdspflgが
483 * trueであることで判別することができる.
484 */
485extern bool_t dspflg;
486
487/*
488 * レディキュー
489 *
490 * レディキューは,実行できる状æ…
491‹ã®ã‚¿ã‚¹ã‚¯ã‚’管理するためのキューである.
492 * 実行状æ…
493‹ã®ã‚¿ã‚¹ã‚¯ã‚‚管理しているため,レディ(実行可能)キューという
494 * 名称は正確ではないが,レディキューという名称が定着しているため,こ
495 * の名称で呼ぶことにする.
496 *
497 * レディキューは,優å…
498ˆåº¦ã”とのタスクキューで構成されている.タスクの
499 * TCBは,該当する優å…
500ˆåº¦ã®ã‚­ãƒ¥ãƒ¼ã«ç™»éŒ²ã•ã‚Œã‚‹ï¼Ž
501 */
502extern QUEUE ready_queue[TNUM_TPRI];
503
504/*
505 * レディキューサーチのためのビットマップ
506 *
507 * レディキューのサーチを効率よく行うために,優å…
508ˆåº¦ã”とのタスクキュー
509 * にタスクがå…
510¥ã£ã¦ã„るかどうかを示すビットマップを用意している.ビッ
511 * トマップを使うことで,メモリアクセスの回数を減らすことができるが,
512 * ビット操作命令がå…
513…
514実していないプロセッサで,優å…
515ˆåº¦ã®æ®µéšŽæ•°ãŒå°‘ない
516 * 場合には,ビットマップ操作のオーバーヘッドのために,逆に効率が落ち
517 * る可能性もある.
518 *
519 * 優å…
520ˆåº¦ãŒ16段階であることを仮定しているため,uint16_t型としている.
521 */
522extern uint16_t ready_primap;
523
524/*
525 * 使用していないTCBのリスト
526 */
527extern QUEUE free_tcb;
528
529/*
530 * タスクIDの最大値(kernel_cfg.c)
531 */
532extern const ID tmax_tskid;
533extern const ID tmax_stskid;
534
535/*
536 * タスク初期化ブロックのエリア(kernel_cfg.c)
537 */
538extern const TINIB tinib_table[];
539extern TINIB atinib_table[];
540
541/*
542 * タスク生成順序テーブル(kernel_cfg.c)
543 */
544extern const ID torder_table[];
545
546/*
547 * TCBのエリア(kernel_cfg.c)
548 */
549extern TCB tcb_table[];
550
551/*
552 * タスクの数
553 */
554#define tnum_tsk ((uint_t)(tmax_tskid - TMIN_TSKID + 1))
555#define tnum_stsk ((uint_t)(tmax_stskid - TMIN_TSKID + 1))
556
557/*
558 * タスクIDからTCBを取り出すためのマクロ
559 */
560#define INDEX_TSK(tskid) ((uint_t)((tskid) - TMIN_TSKID))
561#define get_tcb(tskid) (&(tcb_table[INDEX_TSK(tskid)]))
562
563/*
564 * TCBからタスクIDを取り出すためのマクロ
565 */
566#define TSKID(p_tcb) ((ID)(((p_tcb) - tcb_table) + TMIN_TSKID))
567
568/*
569 * タスク管理モジュールの初期化
570 */
571extern void initialize_task(void);
572
573/*
574 * 最高優å…
575ˆé †ä½ã‚¿ã‚¹ã‚¯ã®ã‚µãƒ¼ãƒ
576 *
577 * レディキュー中の最高優å…
578ˆé †ä½ã®ã‚¿ã‚¹ã‚¯ã‚’サーチし,そのTCBへのポインタ
579 * を返す.レディキューが空の場合には,この関数を呼び出してはならない.
580 */
581extern TCB *search_schedtsk(void);
582
583/*
584 * 実行できる状æ…
585‹ã¸ã®é·ç§»
586 *
587 * p_tcbで指定されるタスクをレディキューに挿å…
588¥ã™ã‚‹ï¼Žãƒ¬ãƒ‡ã‚£ã‚­ãƒ¥ãƒ¼ã«æŒ¿å…
589¥
590 * したタスクの優å…
591ˆåº¦ãŒï¼Œå®Ÿè¡Œã™ã¹ãã‚¿ã‚¹ã‚¯ã®å„ªå…
592ˆåº¦ã‚ˆã‚Šã‚‚高い場合は,実
593 * 行すべきタスクを更新する.
594 */
595extern void make_runnable(TCB *p_tcb);
596
597/*
598 * 実行できる状æ…
599‹ã‹ã‚‰ä»–の状æ…
600‹ã¸ã®é·ç§»
601 *
602 * p_tcbで指定されるタスクをレディキューから削除する.p_tcbで指定した
603 * タスクが実行すべきタスクであった場合には,実行すべきタスクを更新す
604 * る.
605 */
606extern void make_non_runnable(TCB *p_tcb);
607
608/*
609 * 休止状æ…
610‹ã¸ã®é·ç§»
611 *
612 * p_tcbで指定されるタスクの状æ…
613‹ã‚’休止状æ…
614‹ã¨ã™ã‚‹ï¼Žã¾ãŸï¼Œã‚¿ã‚¹ã‚¯ã®èµ·å‹•
615 * 時に初期化すべき変数の初期化と,タスク起動のためのコンテキストを設
616 * 定する.
617 */
618extern void make_dormant(TCB *p_tcb);
619
620/*
621 * 休止状æ…
622‹ã‹ã‚‰å®Ÿè¡Œã§ãã‚‹çŠ¶æ…
623‹ã¸ã®é·ç§»
624 *
625 * p_tcbで指定されるタスクの状æ…
626‹ã‚’休止状æ…
627‹ã‹ã‚‰å®Ÿè¡Œã§ãã‚‹çŠ¶æ…
628‹ã¨ã™ã‚‹ï¼Ž
629 */
630extern void make_active(TCB *p_tcb);
631
632/*
633 * タスクの優å…
634ˆåº¦ã®å¤‰æ›´
635 *
636 * p_tcbで指定されるタスクの優å…
637ˆåº¦ã‚’newpri(内
638部表現)に変更する.また,
639 * 必
640要な場合には,実行すべきタスクを更新する.
641 *
642 * p_tcbで指定されるタスクの優å…
643ˆé †ä½ã¯ï¼Œå„ªå…
644ˆåº¦ãŒåŒã˜ã‚¿ã‚¹ã‚¯ã®ä¸­ã§ï¼Œ
645 * mtxmodeがfalseの時は最低,mtxmodeがtrueの時は最高とする.
646 */
647extern void change_priority(TCB *p_tcb, uint_t newpri, bool_t mtxmode);
648
649/*
650 * レディキューの回転
651 *
652 * レディキュー中の,p_queueで指定されるタスクキューを回転させる.また,
653 * 必
654要な場合には,実行すべきタスクを更新する.
655 */
656extern void rotate_ready_queue(QUEUE *p_queue);
657
658/*
659 * タスクの終了処理
660 *
661 * p_tcbで指定されるタスクを終了させる処理を行う.タスクの起動要求キュー
662 * イング数が0でない場合には,再度起動するための処理を行う.
663 */
664extern void task_terminate(TCB *p_tcb);
665
666#endif /* TOPPERS_TASK_H */
Note: See TracBrowser for help on using the repository browser.