📄 task.h
字号:
/*
* TOPPERS/JSP Kernel
* Toyohashi Open Platform for Embedded Real-Time Systems/
* Just Standard Profile Kernel
*
* Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
* Toyohashi Univ. of Technology, JAPAN
* Copyright (C) 2005 by Embedded and Real-Time Systems Laboratory
* Graduate School of Information Science, Nagoya Univ., JAPAN
*
* 忋婰挊嶌尃幰偼丆埲壓偺 (1)乣(4) 偺忦審偐丆Free Software Foundation
* 偵傛偭偰岞昞偝傟偰偄傞 GNU General Public License 偺 Version 2 偵婰
* 弎偝傟偰偄傞忦審傪枮偨偡応崌偵尷傝丆杮僜僼僩僂僃傾乮杮僜僼僩僂僃傾
* 傪夵曄偟偨傕偺傪娷傓丏埲壓摨偠乯傪巊梡丒暋惢丒夵曄丒嵞攝晍乮埲壓丆
* 棙梡偲屇傇乯偡傞偙偲傪柍彏偱嫋戻偡傞丏
* (1) 杮僜僼僩僂僃傾傪僜乕僗僐乕僪偺宍偱棙梡偡傞応崌偵偼丆忋婰偺挊嶌
* 尃昞帵丆偙偺棙梡忦審偍傛傃壓婰偺柍曐徹婯掕偑丆偦偺傑傑偺宍偱僜乕
* 僗僐乕僪拞偵娷傑傟偰偄傞偙偲丏
* (2) 杮僜僼僩僂僃傾傪丆儔僀僽儔儕宍幃側偳丆懠偺僜僼僩僂僃傾奐敪偵巊
* 梡偱偒傞宍偱嵞攝晍偡傞応崌偵偼丆嵞攝晍偵敽偆僪僉儏儊儞僩乮棙梡
* 幰儅僯儏傾儖側偳乯偵丆忋婰偺挊嶌尃昞帵丆偙偺棙梡忦審偍傛傃壓婰
* 偺柍曐徹婯掕傪宖嵹偡傞偙偲丏
* (3) 杮僜僼僩僂僃傾傪丆婡婍偵慻傒崬傓側偳丆懠偺僜僼僩僂僃傾奐敪偵巊
* 梡偱偒側偄宍偱嵞攝晍偡傞応崌偵偼丆師偺偄偢傟偐偺忦審傪枮偨偡偙
* 偲丏
* (a) 嵞攝晍偵敽偆僪僉儏儊儞僩乮棙梡幰儅僯儏傾儖側偳乯偵丆忋婰偺挊
* 嶌尃昞帵丆偙偺棙梡忦審偍傛傃壓婰偺柍曐徹婯掕傪宖嵹偡傞偙偲丏
* (b) 嵞攝晍偺宍懺傪丆暿偵掕傔傞曽朄偵傛偭偰丆TOPPERS僾儘僕僃僋僩偵
* 曬崘偡傞偙偲丏
* (4) 杮僜僼僩僂僃傾偺棙梡偵傛傝捈愙揑傑偨偼娫愙揑偵惗偠傞偄偐側傞懝
* 奞偐傜傕丆忋婰挊嶌尃幰偍傛傃TOPPERS僾儘僕僃僋僩傪柶愑偡傞偙偲丏
*
* 杮僜僼僩僂僃傾偼丆柍曐徹偱採嫙偝傟偰偄傞傕偺偱偁傞丏忋婰挊嶌尃幰偍
* 傛傃TOPPERS僾儘僕僃僋僩偼丆杮僜僼僩僂僃傾偵娭偟偰丆偦偺揔梡壜擻惈傕
* 娷傔偰丆偄偐側傞曐徹傕峴傢側偄丏傑偨丆杮僜僼僩僂僃傾偺棙梡偵傛傝捈
* 愙揑傑偨偼娫愙揑偵惗偠偨偄偐側傞懝奞偵娭偟偰傕丆偦偺愑擟傪晧傢側偄丏
*
* @(#) $Id: task.h,v 1.10 2005/11/15 06:42:04 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乯
* 偼嬫暿偟側偄丏椉忬懺傪憤徧偟偰丆幚峴偱偒傞忬懺乮RUNNABLE乯偲屇傇丏
* 擇廳懸偪忬懺偼丆(TS_WAITING | TS_SUSPENDED) 偱昞偡丏TS_WAIT_????
* 偼丆懸偪忬懺偵敽偆晅懏忬懺傪昞偟丆懸偪忬懺乮擇廳懸偪忬懺傪娷傓乯偺
* 応崌偵偺傒愝掕偝傟傞丏
*/
#define TS_DORMANT 0x00u /* 媥巭忬懺 */
#define TS_RUNNABLE 0x01u /* 幚峴偱偒傞忬懺 */
#define TS_WAITING 0x02u /* 懸偪忬懺 */
#define TS_SUSPENDED 0x04u /* 嫮惂懸偪忬懺 */
#define TS_WAIT_SLEEP 0x08u /* 婲彴懸偪忬懺 */
#define TS_WAIT_WOBJ 0x10u /* 摨婜丒捠怣僆僽僕僃僋僩偵懳偡傞懸偪忬懺 */
#define TS_WAIT_WOBJCB 0x20u /* 嫟捠晹暘偺懸偪僉儏乕偵偮側偑偭偰偄傞 */
/*
* 僞僗僋忬懺敾暿儅僋儘
*
* 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乯
* 傪巊偭偰偄傞丏
*/
#define TSK_TICKS 10 // ticks for a task
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; /* 僞僗僋椺奜張棟儖乕僠儞偺婲摦斣抧 */
UW tskTimeSlice;
} 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; /* 僞僗僋僉儏乕 */
ID tskID; // Added by Chen Yi @srf
TINIB *tinib; /* 僞僗僋弶婜壔僽儘僢僋傊偺億僀儞僞 */
UINT tstat : TBIT_TCB_TSTAT; /* 僞僗僋忬懺乮撪晹昞尰乯*/
UINT priority : TBIT_TCB_PRIORITY; /* 尰嵼偺桪愭搙乮撪晹昞尰乯*/
unsigned int actcnt : 1; /* 婲摦梫媮僉儏乕僀儞僌 */
unsigned int wupcnt : 1; /* 婲彴梫媮僉儏乕僀儞僌 */
unsigned int enatex : 1; /* 僞僗僋椺奜張棟嫋壜忬懺 */
TEXPTN texptn; /* 曐棷椺奜梫場 */
WINFO *winfo; /* 懸偪忣曬僽儘僢僋傊偺億僀儞僞 */
CTXB tskctxb; /* 僞僗僋僐儞僥僉僗僩僽儘僢僋 */
} TCB;
/*
* 幚峴忬懺偺僞僗僋
*
* 幚峴忬懺偺僞僗僋乮亖僾儘僙僢僒偑僐儞僥僉僗僩傪帩偭偰偄傞僞僗僋乯偺
* TCB 傪巜偡億僀儞僞丏幚峴忬懺偺僞僗僋偑側偄応崌偼 NULL 偵偡傞丏
* 僒乕價僗僐乕儖偺張棟拞偱丆帺僞僗僋乮僒乕價僗僐乕儖傪屇傃弌偟偨僞僗
* 僋乯偵娭偡傞忣曬傪嶲徠偡傞応崌偼 runtsk 傪巊偆丏runtsk 傪彂偒姺偊
* 傞偺偼丆僨傿僗僷僢僠儍乮偲弶婜壔張棟乯偺傒偱偁傞丏
*/
extern TCB *runtsk;
/*
* 嵟崅桪愭弴埵偺僞僗僋
*
* 幚峴偱偒傞僞僗僋偺拞偱嵟崅桪愭弴埵偺僞僗僋偺 TCB 傪巜偡億僀儞僞丏幚
* 峴偱偒傞僞僗僋偑側偄応崌偼 NULL 偵偡傞丏
* 僨傿僗僷僢僠嬛巭忬懺側偳丆僨傿僗僷僢僠偑曐棷偝傟偰偄傞娫偼丆runtsk
* 偲堦抳偟偰偄傞偲偼尷傜側偄丏
*/
extern TCB *schedtsk;
/*
* 僨傿僗僷僢僠乛僞僗僋椺奜張棟儖乕僠儞婲摦梫媮僼儔僌
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -