source: anotherchoice/tags/jsp-1.4.4-full-UTF8/kernel/task.h@ 26

Last change on this file since 26 was 26, checked in by ykominami, 12 years ago

initial

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