source: azure_iot_hub/trunk/asp3_dcre/kernel/task.h@ 388

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

Azure IoT Hub Device C SDK を使ったサンプルの追加

  • 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.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 388 2019-05-22 11:25:18Z 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
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
412 WINFO *p_winfo; /* 待
413ち情
414報ブロックへのポインタ */
415 MTXCB *p_lastmtx; /* 最後にロックしたミューテックス */
416 TSKCTXB tskctxb; /* タスクコンテキストブロック */
417} TCB;
418
419/*
420 * 実行状æ…
421‹ã®ã‚¿ã‚¹ã‚¯
422 *
423 * 実行状æ…
424‹ã®ã‚¿ã‚¹ã‚¯ï¼ˆï¼ãƒ—ロセッサがコンテキストを持っているタスク)の
425 * TCBを指すポインタ.実行状æ…
426‹ã®ã‚¿ã‚¹ã‚¯ãŒãªã„場合はNULLにする.
427 *
428 * サービスコールの処理中で,自タスク(サービスコールを呼び出したタス
429 * ク)に関する情
430報を参ç…
431§ã™ã‚‹å ´åˆã¯p_runtskを使う.p_runtskを書き換え
432 * るのは,ディスパッチャ(と初期化処理)のみである.
433 */
434extern TCB *p_runtsk;
435
436/*
437 * 実行すべきタスク
438 *
439 * 実行すべきタスクのTCBを指すポインタ.実行できるタスクがない場合は
440 * NULLにする.
441 *
442 * p_runtskは,通常はp_schedtskと一致しているが,非タスクコンテキスト
443 * 実行中は,一致しているとは限らない.割込み優å…
444ˆåº¦ãƒžã‚¹ã‚¯å…
445¨è§£é™¤ã§ãªã„
446 * 状æ…
447‹ã®é–“とディスパッチ禁止状æ…
448‹ã®é–“(すなわち,dspflgがfalseである間)
449 * は,p_schedtskを更新しない.
450 */
451extern TCB *p_schedtsk;
452
453/*
454 * ディスパッチ許可状æ…
455‹
456 *
457 * ディスパッチ許可状æ…
458‹ã§ã‚ることを示すフラグ.
459 */
460extern bool_t enadsp;
461
462/*
463 * タスクディスパッチ可能状æ…
464‹
465 *
466 * 割込み優å…
467ˆåº¦ãƒžã‚¹ã‚¯å…
468¨è§£é™¤çŠ¶æ…
469‹ã§ã‚り,ディスパッチ許可状æ…
470‹ã§ã‚る(ディ
471 * スパッチ禁止状æ…
472‹ã§ãªã„)ことを示すフラグ.ディスパッチ保留状æ…
473‹ã§ãª
474 * いことは,タスクコンテキスト実行中で,CPUロック状æ…
475‹ã§ãªãï¼Œdspflgが
476 * trueであることで判別することができる.
477 */
478extern bool_t dspflg;
479
480/*
481 * レディキュー
482 *
483 * レディキューは,実行できる状æ…
484‹ã®ã‚¿ã‚¹ã‚¯ã‚’管理するためのキューである.
485 * 実行状æ…
486‹ã®ã‚¿ã‚¹ã‚¯ã‚‚管理しているため,レディ(実行可能)キューという
487 * 名称は正確ではないが,レディキューという名称が定着しているため,こ
488 * の名称で呼ぶことにする.
489 *
490 * レディキューは,優å…
491ˆåº¦ã”とのタスクキューで構成されている.タスクの
492 * TCBは,該当する優å…
493ˆåº¦ã®ã‚­ãƒ¥ãƒ¼ã«ç™»éŒ²ã•ã‚Œã‚‹ï¼Ž
494 */
495extern QUEUE ready_queue[TNUM_TPRI];
496
497/*
498 * レディキューサーチのためのビットマップ
499 *
500 * レディキューのサーチを効率よく行うために,優å…
501ˆåº¦ã”とのタスクキュー
502 * にタスクがå…
503¥ã£ã¦ã„るかどうかを示すビットマップを用意している.ビッ
504 * トマップを使うことで,メモリアクセスの回数を減らすことができるが,
505 * ビット操作命令がå…
506…
507実していないプロセッサで,優å…
508ˆåº¦ã®æ®µéšŽæ•°ãŒå°‘ない
509 * 場合には,ビットマップ操作のオーバーヘッドのために,逆に効率が落ち
510 * る可能性もある.
511 *
512 * 優å…
513ˆåº¦ãŒ16段階であることを仮定しているため,uint16_t型としている.
514 */
515extern uint16_t ready_primap;
516
517/*
518 * 使用していないTCBのリスト
519 */
520extern QUEUE free_tcb;
521
522/*
523 * タスクIDの最大値(kernel_cfg.c)
524 */
525extern const ID tmax_tskid;
526extern const ID tmax_stskid;
527
528/*
529 * タスク初期化ブロックのエリア(kernel_cfg.c)
530 */
531extern const TINIB tinib_table[];
532extern TINIB atinib_table[];
533
534/*
535 * タスク生成順序テーブル(kernel_cfg.c)
536 */
537extern const ID torder_table[];
538
539/*
540 * TCBのエリア(kernel_cfg.c)
541 */
542extern TCB tcb_table[];
543
544/*
545 * タスクの数
546 */
547#define tnum_tsk ((uint_t)(tmax_tskid - TMIN_TSKID + 1))
548#define tnum_stsk ((uint_t)(tmax_stskid - TMIN_TSKID + 1))
549
550/*
551 * タスクIDからTCBを取り出すためのマクロ
552 */
553#define INDEX_TSK(tskid) ((uint_t)((tskid) - TMIN_TSKID))
554#define get_tcb(tskid) (&(tcb_table[INDEX_TSK(tskid)]))
555
556/*
557 * TCBからタスクIDを取り出すためのマクロ
558 */
559#define TSKID(p_tcb) ((ID)(((p_tcb) - tcb_table) + TMIN_TSKID))
560
561/*
562 * タスク管理モジュールの初期化
563 */
564extern void initialize_task(void);
565
566/*
567 * 最高優å…
568ˆé †ä½ã‚¿ã‚¹ã‚¯ã®ã‚µãƒ¼ãƒ
569 *
570 * レディキュー中の最高優å…
571ˆé †ä½ã®ã‚¿ã‚¹ã‚¯ã‚’サーチし,そのTCBへのポインタ
572 * を返す.レディキューが空の場合には,この関数を呼び出してはならない.
573 */
574extern TCB *search_schedtsk(void);
575
576/*
577 * 実行できる状æ…
578‹ã¸ã®é·ç§»
579 *
580 * p_tcbで指定されるタスクをレディキューに挿å…
581¥ã™ã‚‹ï¼Žãƒ¬ãƒ‡ã‚£ã‚­ãƒ¥ãƒ¼ã«æŒ¿å…
582¥
583 * したタスクの優å…
584ˆåº¦ãŒï¼Œå®Ÿè¡Œã™ã¹ãã‚¿ã‚¹ã‚¯ã®å„ªå…
585ˆåº¦ã‚ˆã‚Šã‚‚高い場合は,実
586 * 行すべきタスクを更新する.
587 */
588extern void make_runnable(TCB *p_tcb);
589
590/*
591 * 実行できる状æ…
592‹ã‹ã‚‰ä»–の状æ…
593‹ã¸ã®é·ç§»
594 *
595 * p_tcbで指定されるタスクをレディキューから削除する.p_tcbで指定した
596 * タスクが実行すべきタスクであった場合には,実行すべきタスクを更新す
597 * る.
598 */
599extern void make_non_runnable(TCB *p_tcb);
600
601/*
602 * 休止状æ…
603‹ã¸ã®é·ç§»
604 *
605 * p_tcbで指定されるタスクの状æ…
606‹ã‚’休止状æ…
607‹ã¨ã™ã‚‹ï¼Žã¾ãŸï¼Œã‚¿ã‚¹ã‚¯ã®èµ·å‹•
608 * 時に初期化すべき変数の初期化と,タスク起動のためのコンテキストを設
609 * 定する.
610 */
611extern void make_dormant(TCB *p_tcb);
612
613/*
614 * 休止状æ…
615‹ã‹ã‚‰å®Ÿè¡Œã§ãã‚‹çŠ¶æ…
616‹ã¸ã®é·ç§»
617 *
618 * p_tcbで指定されるタスクの状æ…
619‹ã‚’休止状æ…
620‹ã‹ã‚‰å®Ÿè¡Œã§ãã‚‹çŠ¶æ…
621‹ã¨ã™ã‚‹ï¼Ž
622 */
623extern void make_active(TCB *p_tcb);
624
625/*
626 * タスクの優å…
627ˆåº¦ã®å¤‰æ›´
628 *
629 * p_tcbで指定されるタスクの優å…
630ˆåº¦ã‚’newpri(内
631部表現)に変更する.また,
632 * 必
633要な場合には,実行すべきタスクを更新する.
634 *
635 * p_tcbで指定されるタスクの優å…
636ˆé †ä½ã¯ï¼Œå„ªå…
637ˆåº¦ãŒåŒã˜ã‚¿ã‚¹ã‚¯ã®ä¸­ã§ï¼Œ
638 * mtxmodeがfalseの時は最低,mtxmodeがtrueの時は最高とする.
639 */
640extern void change_priority(TCB *p_tcb, uint_t newpri, bool_t mtxmode);
641
642/*
643 * レディキューの回転
644 *
645 * レディキュー中の,p_queueで指定されるタスクキューを回転させる.また,
646 * 必
647要な場合には,実行すべきタスクを更新する.
648 */
649extern void rotate_ready_queue(QUEUE *p_queue);
650
651/*
652 * タスクの終了処理
653 *
654 * p_tcbで指定されるタスクを終了させる処理を行う.タスクの起動要求キュー
655 * イング数が0でない場合には,再度起動するための処理を行う.
656 */
657extern void task_terminate(TCB *p_tcb);
658
659#endif /* TOPPERS_TASK_H */
Note: See TracBrowser for help on using the repository browser.