📄 task.h
字号:
*
* 妱崬傒僴儞僪儔乛CPU椺奜僴儞僪儔偺弌岥張棟偵丆僨傿僗僷僢僠傑偨偼
* 僞僗僋椺奜張棟儖乕僠儞偺婲摦傪梫媮偡傞偙偲傪帵偡僼儔僌丏
*/
extern BOOL reqflg;
/*
* 僨傿僗僷僢僠嫋壜忬懺
*
* 僨傿僗僷僢僠嫋壜忬懺偱偁傞乮偡側傢偪丆僨傿僗僷僢僠嬛巭忬懺偱側偄乯
* 偙偲傪帵偡僼儔僌丏
*/
extern BOOL enadsp;
/*
* 儗僨傿僉儏乕
*
* 儗僨傿僉儏乕偼丆幚峴偱偒傞忬懺偺僞僗僋傪娗棟偡傞偨傔偺僉儏乕偱偁傞丏
* 幚峴忬懺偺僞僗僋傕娗棟偟偰偄傞偨傔丆儗僨傿乮幚峴壜擻乯僉儏乕偲偄偆
* 柤徧偼惓妋偱偼側偄偑丆儗僨傿僉儏乕偲偄偆柤徧偑掕拝偟偰偄傞偨傔丆偙
* 偺柤徧偱屇傇偙偲偵偡傞丏
*
* 儗僨傿僉儏乕偼丆桪愭搙偛偲偺僞僗僋僉儏乕偱峔惉偝傟偰偄傞丏僞僗僋偺
* TCB偼丆奩摉偡傞桪愭搙偺僉儏乕偵搊榐偝傟傞丏
*/
extern QUEUE ready_queue[TNUM_TPRI];
/*
* 儗僨傿僉儏乕僒乕僠偺偨傔偺價僢僩儅僢僾
*
* 儗僨傿僉儏乕偺僒乕僠傪岠棪傛偔峴偆偨傔偵丆桪愭搙偛偲偺僞僗僋僉儏乕
* 偵僞僗僋偑擖偭偰偄傞偐偳偆偐傪帵偡價僢僩儅僢僾傪梡堄偟偰偄傞丏價僢
* 僩儅僢僾傪巊偆偙偲偱丆儊儌儕傾僋僙僗偺夞悢傪尭傜偡偙偲偑偱偒傞偑丆
* 價僢僩憖嶌柦椷偑廩幚偟偰偄側偄僾儘僙僢僒偱丆桪愭搙偺抜奒悢偑彮側偄
* 応崌偵偼丆價僢僩儅僢僾憖嶌偺僆乕僶乕僿僢僪偺偨傔偵丆媡偵岠棪偑棊偪
* 傞壜擻惈傕偁傞丏
*/
extern UINT ready_primap;
/*
* 僞僗僋ID偺嵟戝抣乮kernel_cfg.c乯
*/
extern const ID tmax_tskid;
/*
* 僞僗僋弶婜壔僽儘僢僋偺僄儕傾乮kernel_cfg.c乯
*/
extern TINIB tinib_table[];
/*
* 僞僗僋惗惉弴彉僥乕僽儖乮kernel_cfg.c乯
*/
extern const ID torder_table[];
/*
* TCB偺僄儕傾乮kernel_cfg.c乯
*/
extern TCB tcb_table[];
// Ticks for tasks, added by Chen Yi @srf
extern UB aTicks[]; // Ticks for a task
/*
* 僞僗僋偺悢
*/
#define TNUM_TSK ((UINT)(tmax_tskid - TMIN_TSKID + 1))
/*
* 僞僗僋ID偐傜TCB傪庢傝弌偡偨傔偺儅僋儘
*/
#define INDEX_TSK(tskid) ((UINT)((tskid) - TMIN_TSKID))
#define get_tcb(tskid) (&(tcb_table[INDEX_TSK(tskid)]))
#define get_tcb_self(tskid) ((tskid) == TSK_SELF ? runtsk : get_tcb(tskid))
/*
* TCB偐傜僞僗僋ID傪庢傝弌偡偨傔偺儅僋儘
*/
#define TSKID(tcb) ((ID)(((tcb) - tcb_table) + TMIN_TSKID))
/*
* 僞僗僋娗棟儌僕儏乕儖偺弶婜壔
*/
extern void task_initialize(void);
/*
* 嵟崅桪愭弴埵僞僗僋偺僒乕僠
*
* 儗僨傿僉儏乕拞偺嵟崅桪愭弴埵偺僞僗僋傪僒乕僠偟丆偦偺TCB傊偺億僀儞僞
* 傪曉偡丏儗僨傿僉儏乕偑嬻偺応崌偵偼丆偙偺娭悢傪屇傃弌偟偰偼側傜側偄丏
*/
extern TCB *search_schedtsk(void);
/*
* 幚峴偱偒傞忬懺傊偺堏峴
*
* tcb 偱巜掕偝傟傞僞僗僋偺忬懺傪幚峴偱偒傞忬懺偲偟丆儗僨傿僉儏乕偵憓
* 擖偡傞丏幚峴偱偒傞忬懺偵側偭偨僞僗僋偺桪愭搙偑丆嵟崅桪愭弴埵偺僞僗
* 僋偺桪愭搙傛傝傕崅偄応崌偼丆嵟崅桪愭弴埵偺僞僗僋傪峏怴偟丆僨傿僗僷僢
* 僠嫋壜忬懺偱偁傟偽 TRUE 傪曉偡丏偦偆偱側偄応崌偼 FALSE 傪曉偡丏
*/
extern BOOL make_runnable(TCB *tcb);
/*
* 幚峴偱偒傞忬懺偐傜懠偺忬懺傊偺堏峴
*
* tcb 偱巜掕偝傟傞僞僗僋傪儗僨傿僉儏乕偐傜嶍彍偡傞丏tcb 偱巜掕偟偨僞
* 僗僋偑嵟崅桪愭弴埵偺僞僗僋偱偁偭偨応崌偵偼丆嵟崅桪愭弴埵偺僞僗僋傪
* 愝掕偟側偍偟丆僨傿僗僷僢僠嫋壜忬懺偱偁傟偽 TRUE 傪曉偡丏偦偆偱側偄
* 応崌偼 FALSE 傪曉偡丏僞僗僋偺忬懺偼峏怴偟側偄丏
*/
extern BOOL make_non_runnable(TCB *tcb);
/*
* 媥巭忬懺傊偺堏峴
*
* tcb 偱巜掕偝傟傞僞僗僋偺忬懺傪媥巭忬懺偲偡傞丏傑偨丆僞僗僋偺婲摦帪
* 偵弶婜壔偡傋偒曄悢偺弶婜壔偲丆僞僗僋婲摦偺偨傔偺僐儞僥僉僗僩傪愝掕
* 偡傞丏
*/
extern void make_dormant(TCB *tcb);
/*
* 媥巭忬懺偐傜幚峴偱偒傞忬懺傊偺堏峴
*
* tcb 偱巜掕偝傟傞僞僗僋偺忬懺傪媥巭忬懺偐傜幚峴偱偒傞忬懺偲偡傞丏幚
* 峴偱偒傞忬懺偵堏峴偟偨僞僗僋傊偺僨傿僗僷僢僠偑昁梫側応崌偼 TRUE丆
* 偦偆偱側偄応崌偼 FALSE 傪曉偡丏
*/
extern BOOL make_active(TCB *tcb);
/*
* 幚峴忬懺偺僞僗僋偺廔椆
*
* exit_task 傪 ext_tsk 偵杽傔崬傑偢偵暿偺娭悢偵偟偰偄傞偺偼丆
* create_context 偲 activate_context 偑帺僞僗僋偺廔椆張棟偱巊梡偡傞
* 僗僞僢僋傪攋夡偟側偄傛偆偵偡傞偨傔偺懳嶔偺堦娐偱偁傞丏ext_tsk 偲偼
* 暿娭悢偵偟偰偍偔偙偲偱丆儘乕僇儖曄悢傕娷傔偰丆巊梡偡傞僗僞僢僋椞堟
* 偑廳側傜側偄傛偆偵偱偒傞丏傑偨丆僐儞僷僀儔偑帺摦揑偵僀儞儔僀儞揥奐
* 偡傞偺傪旔偗傞偨傔偵丆ext_tsk 偲偼暿偺僼傽僀儖偵擖傟偰偄傞丏
*/
extern void exit_task(void);
/*
* 儗僨傿僉儏乕拞偺僞僗僋偺桪愭搙偺曄峏
*
* tcb 偱巜掕偝傟傞儗僨傿僉儏乕拞偺僞僗僋偺桪愭搙傪 newpri乮撪晹昞尰乯
* 偵曄峏偡傞丏傑偨丆昁梫側応崌偵偼嵟崅桪愭弴埵偺僞僗僋傪峏怴偟丆僨傿
* 僗僷僢僠嫋壜忬懺偱偁傟偽 TRUE 傪曉偡丏偦偆偱側偄応崌偼 FALSE 傪曉
* 偡丏
*/
extern BOOL change_priority(TCB *tcb, UINT newpri); // Modified by Chen Yi @srf
/*
* 儗僨傿僉儏乕偺夞揮
*
* 儗僨傿僉儏乕拞偺丆pri 偱巜掕偝傟傞桪愭搙偺僞僗僋僉儏乕傪夞揮偝偣傞丏
* 傑偨丆昁梫側応崌偵偼嵟崅桪愭弴埵偺僞僗僋傪曄峏偟丆僨傿僗僷僢僠偑曐
* 棷偝傟偰偄側偗傟偽 TRUE 傪曉偡丏偦偆偱側偄応崌偼 FALSE 傪曉偡丏
*/
extern BOOL rotate_ready_queue(UINT pri);
extern void poll_dispatch(void); // Polling dispatch. Added by Chen Yi @srf
extern void preemption_insert(const ID id); // Preemption dispatch. Added by Chen Yi @srf
// Create a task. Added by Chen Yi @srf
extern ID cre_tsk(FP task, SIZE stksz, VP stk, ATR tskatr, UINT priority, UB nTicks);
extern void recre_tsk(const ID id, FP task, SIZE stksz, VP stk, ATR tskatr, UINT priority, UB nTicks);
extern void preemption_dispatch_call(const ID id); // preemption dispatch for normal function
extern void preemption_dispatch_intr(const ID id); // preemption dispatch for interrupt handler
extern void exit_to_dispatch(void); // Exit the current task.
#define READY_TO_ENTER_PREEMPTION_DISPATCH(tskid) \
asm(".extern _preemption_dispatch_intr;"); \
asm("[--sp] = r0;"); \
asm("r0 = reti;"); \
asm("rets = r0;"); \
asm("r0.h = hi(_preemption_dispatch_intr);"); \
asm("r0.l = lo(_preemption_dispatch_intr);"); \
asm("reti = r0;"); \
asm(" " : : "r0"(tskid)); \
asm("rti;")
/*
* 僞僗僋椺奜張棟儖乕僠儞偺屇弌偟
*
* 僞僗僋椺奜張棟儖乕僠儞傪屇傃弌偡丏屇傃弌偡慜偵丆幚峴忬懺偺僞僗僋偺
* 曐棷椺奜梫場傪僋儕傾偟丆僞僗僋椺奜張棟嬛巭忬懺偵偟丆CPU儘僢僋傪夝
* 彍偡傞丏
* 僞僗僋椺奜張棟儖乕僠儞偐傜栠傞偲丆傑偢CPU儘僢僋忬懺偵栠偟丆偦偺娫
* 偵曐棷椺奜梫場偑 0 偱側偔側偭偰偄傟偽丆嵞傃僞僗僋椺奜張棟儖乕僠儞
* 傪屇傃弌偡丏曐棷椺奜梫場偑 0 偺応崌偵偼丆椺奜張棟嫋壜忬懺偵偟偰娭
* 悢偐傜儕僞乕儞偡傞丏
* 偙偺娭悢偼丆幚峴忬懺偺僞僗僋偑丆僞僗僋椺奜張棟嫋壜忬懺乮enatex 偑
* TRUE乯偱丆曐棷椺奜梫場偑 0 偱側偄乮texptn 偑 0 偱側偄乯応崌偵屇傃
* 弌偡偙偲傪憐掕偟偰偄傞丏偙偺娭悢偼丆CPU儘僢僋忬懺偱屇傃弌偝側偗傟
* 偽側傜側偄丏
*/
extern void call_texrtn(void);
/*
* 僞僗僋椺奜張棟儖乕僠儞偺婲摦
*
* 幚峴忬懺偺僞僗僋偑僞僗僋椺奜張棟儖乕僠儞偺婲摦忦審傪枮偨偟偰偄傟偽丆
* 僞僗僋椺奜張棟儖乕僠儞傪屇傃弌偡丏CPU椺奜張棟儖乕僠儞傪屇傃弌偡帪
* 偼丆堦帪揑偵CPU儘僢僋傪夝彍偡傞丏
* 偙偺娭悢偼丆僨傿僗僷僢僠儍傗妱崬傒僴儞僪儔乛CPU椺奜僴儞僪儔偺弌岥
* 張棟偐傜屇傃弌偝傟傞偙偲傪憐掕偟偰偄傞偑丆摨摍偺張棟傪僞乕僎僢僩埶
* 懚晹偱婰弎偟偰傕傛偄丏偦偺応崌偵偼丆OMIT_CALLTEX 傪儅僋儘掕媊偡傟
* 偽傛偄丏
*/
extern void calltex(void);
#endif /* _TASK_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -