📄 task.h
字号:
/* * TOPPERS/JSP Kernel * Toyohashi Open Platform for Embedded Real-Time Systems/ * Just Standard Profile Kernel * * Copyright (C) 2000,2001 by Embedded and Real-Time Systems Laboratory * Toyohashi Univ. of Technology, JAPAN * * 惧淡螟侯涪荚は·Free Software Foundation によって给山されている * GNU General Public License の Version 2 に淡揭されている掘凤か·笆 * 布の(1)×(4)の掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェ * アを猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· * 网脱と钙ぶ∷することを痰浸で钓满するˉ * (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 * 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 * スコ〖ド面に崔まれていることˉ * (2) 塑ソフトウェアを浩网脱材墙なバイナリコ〖ド∈リロケ〖タブルオブ * ジェクトファイルやライブラリなど∷の妨で网脱する眷圭には·网脱 * に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯涪山绩· * この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ * (3) 塑ソフトウェアを浩网脱稍材墙なバイナリコ〖ドの妨または怠达に寥 * み哈んだ妨で网脱する眷圭には·肌のいずれかの掘凤を塔たすことˉ * (a) 网脱に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯 * 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ * (b) 网脱の妨轮を·侍に年める数恕によって·惧淡螟侯涪荚に鼠桂する * ことˉ * (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 * 巢からも·惧淡螟侯涪荚を倘勒することˉ * * 塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚は· * 塑ソフトウェアに簇して·その努脱材墙拉も崔めて·いかなる瘦沮も乖わ * ないˉまた·塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じたい * かなる禄巢に簇しても·その勒扦を砷わないˉ * * @(#) $Id: task.h,v 1.6 2002/03/26 08:19:38 hiro Exp $ *//* * タスク瓷妄モジュ〖ル */#ifndef _TASK_H_#define _TASK_H_#include "queue.h"#include "time_event.h"/* * タスク庭黎刨の柒婶山附ˇ嘲婶山附恃垂マクロ */#define INT_PRIORITY(x) ((UINT)((x) - TMIN_TPRI))#define EXT_TSKPRI(x) ((PRI)(x) + TMIN_TPRI)/* * タスク觉轮の柒婶山附 * * TCB 面のタスク觉轮では·悸乖觉轮∈RUNNING∷と悸乖材墙觉轮∈READY∷ * は惰侍しないˉ企脚略ち觉轮は·(TS_WAITING | TS_SUSPENDED) で山すˉ * TS_WAIT_???? は·略ち觉轮に燃う烧掳觉轮を山し·略ち觉轮∈企脚略ち * 觉轮を崔む∷の眷圭にのみ肋年されるˉ */#define TS_DORMANT 0x00 /* 蒂贿觉轮 */#define TS_RUNNABLE 0x01 /* 悸乖できる觉轮 */#define TS_WAITING 0x02 /* 略ち觉轮 */#define TS_SUSPENDED 0x04 /* 动扩略ち觉轮 */#define TS_WAIT_SLEEP 0x08 /* 弹静略ち觉轮 */#define TS_WAIT_WOBJ 0x10 /* 票袋ˇ奶慨オブジェクトに滦する略ち觉轮 */#define TS_WAIT_WOBJCB 0x20 /* 鼎奶婶尸の略ちキュ〖につながっている *//* * タスク觉轮冉侍マクロ * * TSTAT_DORMANT はタスクが蒂贿觉轮であるかどうかを·TSTAT_RUNNABLE * はタスクが悸乖できる觉轮であるかどうかを冉侍するˉTSTAT_WAITING は * 略ち觉轮と企脚略ち觉轮のいずれかであるかどうかを·TSTAT_SUSPENDED * は动扩略ち觉轮と企脚略ち觉轮のいずれかであるかどうかを冉侍するˉ */#define TSTAT_DORMANT(tstat) ((tstat) == TS_DORMANT)#define TSTAT_RUNNABLE(tstat) (((tstat) & TS_RUNNABLE) != 0)#define TSTAT_WAITING(tstat) (((tstat) & TS_WAITING) != 0)#define TSTAT_SUSPENDED(tstat) (((tstat) & TS_SUSPENDED) != 0)/* * 略ち攫鼠ブロック∈WINFO∷の年盗 * * タスクが略ち觉轮の粗は·TCB およびそこから回される WINFO を肌のよ * うに肋年しなければならないˉ * * (a) TCB のタスク觉轮を略ち觉轮にするˉその狠に·略ち觉轮に燃う烧掳 * 觉轮∈TS_WAIT_????∷も肋年するˉ * * (b) タイムアウトを雌浑するために·タイムイベントブロックを判峡するˉ * 判峡するタイムイベントブロックは·略ちに掐るサ〖ビスコ〖ル借妄簇眶 * のロ〖カル恃眶として澄瘦し·それへのポインタを WINFO の tmevtb に * 淡脖するˉタイムアウトの雌浑が涩妥ない眷圭∈笔底略ちの眷圭∷には· * tmevtb を NULL にするˉ * * 票袋ˇ奶慨オブジェクトに滦する略ち觉轮の眷圭には·筛洁の WINFO に * wobjcbフィ〖ルドを纳裁した菇陇挛∈WINFO_WOBJ·wait.h で年盗∷を蝗 * い·タスク觉轮に TS_WAIT_WOBJ を肋年するˉまた·笆布の (c)×(e) の * 肋年を乖う涩妥があるˉ票袋ˇ奶慨オブジェクトに簇犯しない略ち∈弹静 * 略ち·箕粗沸册略ち∷の眷圭には·(c)×(e) は涩妥ないˉ * * (c) TCB を略ち滦据の票袋ˇ奶慨オブジェクトの略ちキュ〖につなぐˉ略 * ちキュ〖につなぐために·task_queue を蝗うˉTCB を票袋ˇ奶慨オブジェ * クトのコントロ〖ルブロックの鼎奶婶尸∈WOBJCB∷の略ちキュ〖につない * だ眷圭には·タスク觉轮に TS_WAIT_WOBJCB を肋年するˉ * * (d) 略ち滦据の票袋ˇ奶慨オブジェクトのコントロ〖ルブロックへのポイ * ンタを·WINFO_WOBJ の wobjcb に淡脖するˉ * JSPカ〖ネルで wobjcb を蝗うのは·庭黎刨界の略ちキュ〖につながれて * いるタスクの庭黎刨が恃构された眷圭のみであるが·デバッグ攫鼠を艰り * 叫しやすいように·略ちキュ〖が庭黎刨界でない眷圭にも wobjcb を肋年 * するˉ * * (e) 略ち滦据の票袋ˇ奶慨オブジェクトに巴赂して淡脖することが涩妥な * 攫鼠がある眷圭には·WINFO_WOBJ に涩妥な攫鼠のためのフィ〖ルドを纳裁 * した菇陇挛を年盗し·WINFO_WOBJ の洛わりに脱いるˉ * * 略ち觉轮を豺近する狠には·略ち豺近したタスクからの手猛を WINFO の * wercd に肋年するˉwercd を蝗うのは略ち豺近笆惯であるのに滦して· * tmevtb は略ち豺近稿は蝗わないため·メモリ泪腆のために鼎脱挛∈union∷ * を蝗っているˉ */typedef union waiting_information { ER wercd; /* 略ち豺近箕のエラ〖コ〖ド */ TMEVTB *tmevtb; /* 略ち觉轮脱のタイムイベントブロック */} WINFO;/* * タスク介袋步ブロック * * タスクに簇する攫鼠を·猛が恃わらないためにROMに弥ける婶尸∈タスク * 介袋步ブロック∷と·猛が恃步するためにRAMに弥かなければならない婶 * 尸∈タスクコントロ〖ルブロック·TCB∷に尸违し·TCB柒に滦炳するタス * ク介袋步ブロックを回すポインタを掐れるˉタスク介袋步ブロック柒に滦 * 炳するTCBを回すポインタを掐れる数恕の数が·RAMの泪腆の囱爬からは司 * ましいが·悸乖跟唯が碍くなるために何脱していないˉ戮のオブジェクト * についても票屯に胺うˉ * タスク介袋步ブロックには·DEF_TEX で年盗されるタスク毋嘲借妄ル〖チ * ンに簇する攫鼠も崔むˉ */typedef struct task_initialization_block { ATR tskatr; /* タスク掳拉 */ VP_INT exinf; /* タスクの橙磨攫鼠 */ FP task; /* タスクの弹瓢戎孟 */ UINT ipriority; /* タスクの弹瓢箕庭黎刨∈柒婶山附∷ */ SIZE stksz; /* スタック挝拌のサイズ∈摧めた猛∷ */ VP stk; /* スタック挝拌の黎片戎孟 */ ATR texatr; /* タスク毋嘲借妄ル〖チン掳拉 */ FP texrtn; /* タスク毋嘲借妄ル〖チンの弹瓢戎孟 */} TINIB;/* * TCB 面のフィ〖ルドのビット升の年盗 * * TCB 面のフィ〖ルドの芹弥は·拉墙に络きく逼读すると蛔われるため·タ〖 * ゲット巴赂にフィ〖ルドのビット升を恃构することを钓しているˉ */#ifndef TBIT_TCB_TSTAT#define TBIT_TCB_TSTAT 6 /* tstat フィ〖ルドのビット升 */#endif /* TBIT_TCB_TSTAT */#ifndef TBIT_TCB_PRIORITY#define TBIT_TCB_PRIORITY 4 /* priority フィ〖ルドのビット升 */#endif /* TBIT_TCB_PRIORITY *//* * タスクコントロ〖ルブロック∈TCB∷ * * JSPでは·タスクの弹瓢妥滇キュ〖イング眶の呵络猛∈TMAX_ACTCNT∷と弹 * 瓢妥滇キュ〖イング眶の呵络猛∈TMAX_WUPCNT∷は 1 に盖年されているた * め·キュ〖イングされているかどうかの靠刀猛で山附することができるˉ * また·动扩略ち妥滇ネスト眶の呵络猛∈TMAX_SUSCNT∷が 1 に盖年されて * いるので·动扩略ち妥滇ネスト眶∈suscnt∷は涩妥ないˉ */typedef struct task_control_block { QUEUE task_queue; /* タスクキュ〖 */ const TINIB *tinib; /* タスク介袋步ブロックへのポインタ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -