⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tsk.h

📁 SEED的VPM642测试程序-板级支持库
💻 H
字号:
/*
 *  Copyright 2003 by Texas Instruments Incorporated.
 *  All rights reserved. Property of Texas Instruments Incorporated.
 *  Restricted rights to use, duplicate or disclose this code are
 *  granted through contract.
 *  
 */
/* "@(#) DSP/BIOS 4.90.270 12-18-03 (barracuda-o04)" */
/*
 *  ======== tsk.h ========
 *
 */

#ifndef TSK_
#define TSK_

#include <stdarg.h>

#include <knl.h>
#include <prd.h>
#include <sem.h>
#include <sts.h>
#include <sys.h>

#ifdef __cplusplus
extern "C" {
#endif

#define TSK_IDLEPRI	KNL_IDLEPRI
#define TSK_MINPRI	KNL_MINPRI
#define TSK_MAXPRI	KNL_MAXPRI
#define TSK_MAXARGS	KNL_MAXARGS

#define TSK_RUNNING	KNL_RUNNING
#define TSK_READY	KNL_READY
#define TSK_BLOCKED	KNL_BLOCKED
#define TSK_TERMINATED	KNL_TERMINATED

typedef struct TSK_Config {
    Int	    STACKSEG;
    Int	    PRIORITY;
    Uns	    STACKSIZE;
#ifdef _55_
    Uns	    SYSSTACKSIZE;
#endif
    Fxn	    CREATEFXN;
    Fxn	    DELETEFXN;
    Fxn	    EXITFXN;
    Fxn	    SWITCHFXN;
    Fxn	    READYFXN;
} TSK_Config;

extern TSK_Config *TSK;
		/* For C55x, TSK is defined in tsk.c as TSK_Config *TSK */
                /* For C54x, TSK is defined in TSK_end as
			.bss _TSK, 1 * STD_TARGWORDMAUS, 0, STD_TARGWORDMAUS */
                /* For C6x, TSK is defined in TSK_end as
			.bss _TSK, 1 * STD_TARGWORDMAUS, STD_TARGWORDMAUS */

typedef Int TSK_Mode;

typedef struct TSK_Attrs {
    Int		priority;	/* task priority */
    Ptr		stack;		/* stack supplied  */
    Uns		stacksize;	/* size of stack */
#ifdef _55_
    Uns		sysstacksize;  /* size of system stack */
#endif
    Int		stackseg;	/* segment to allocate stack from */
    Ptr		environ;	/* environment pointer */
    String	name;		/* printable name */
    Bool	exitflag;	/* FALSE for server tasks */
} TSK_Attrs;

typedef struct TSK_Obj {
    KNL_Obj	kobj;		/* kernel object */

    Ptr		stack;		/* used in TSK_delete() */
#ifdef _55_
    Ptr		sysstack;	/* system stack for 55x */
#endif
    Uns		stacksize;	/* ditto */
#ifdef _55_
    Uns		sysstacksize;	/* system stackszie for 55x */
#endif
    Int		stackseg;	/* segment to allocate stack from */
    String	name;		/* printable name */
    Ptr		environ;	/* environment pointer */
    Int		errno;		/* TSK_seterr()/TSK_geterr() */
    Bool	exitflag;	/* FALSE for server tasks */
} TSK_Obj, *TSK_Handle;

typedef struct TSK_Stat {
    TSK_Attrs	attrs;		/* task attributes */
    TSK_Mode	mode;		/* TSK_RUNNING, TSK_READY, ... */
    Ptr		sp;		/*stack pointer(not valid when TSK_RUNNING!)*/
   #ifdef _55_
    Ptr		ssp;		/* System stack pointer only forr 55x*/
   #endif
    Uns		used;		/* stack used */
   #ifdef _55_
    Uns		sysUsed;	/* System stack used		 */
   #endif
} TSK_Stat;

extern TSK_Attrs TSK_ATTRS;	/* default attributes */
				/* defined in tsk.c */

extern Int	TSK_nTasks;	/* only modified while inside kernel */
extern Int 	TSK_pid;	/* MP processor id */
extern Int	TSK_initPid;	/* TSK_pid initialization record */
extern Int 	TSK_NUMPIDS;	/* number of processors in MP system */

extern SEM_Obj	TSK_timerSem;

#define TSK_geterr(task)	((task)->errno)
#define TSK_getpri(task)	(((KNL_Handle)(task))->priority)
#define TSK_getname(task)	((task)->name)
#define	TSK_self()	 	((TSK_Handle)KNL_curtask)
#define TSK_seterr(task, e)	((task)->errno = (e))
#define TSK_sleep(nticks)	(SEM_pend(&TSK_timerSem, nticks))
#define TSK_time()		KNL_curtime
#define TSK_tick()		KNL_tick()
#define TSK_itick()		KNL_tick()

extern Void TSK_checkstacks(TSK_Handle oldtask, TSK_Handle newtask);
extern TSK_Handle TSK_create(Fxn fxn, TSK_Attrs *attrs, ...);
extern Void TSK_delete(TSK_Handle task);
extern Void TSK_disable(void);
extern Void TSK_enable(void);
extern Void TSK_exit(void);
extern Ptr  TSK_getenv(TSK_Handle task);
extern Void TSK_init(void);
extern Void TSK_print(TSK_Handle task);
extern Void TSK_setenv(TSK_Handle task, Ptr env);
extern Int  TSK_setpri(TSK_Handle task, Int newpri);
extern Void TSK_stat(TSK_Handle task, TSK_Stat *statbuf);
extern Void TSK_start(TSK_Handle task, Fxn fxn, va_list argv);
extern Void TSK_switchFxn(KNL_Handle oldtask, KNL_Handle newtask);
extern Void TSK_yield(void);

/*
 *  Task hooks for instrumented kernel.
 */
extern Void TSK_createFxn(TSK_Handle task);
extern Void TSK_deleteFxn(TSK_Handle task);
extern Void TSK_exitFxn(Void);
extern Void TSK_readyFxn(TSK_Handle task);
extern Void TSK_settime(TSK_Handle task);
extern Void TSK_deltatime(TSK_Handle task);
extern STS_Handle TSK_getsts(TSK_Handle task);
extern Void TSK_resettime(TSK_Handle task);
extern Void TSK_switchFxn(KNL_Handle oldtask, KNL_Handle newtask);

#ifdef __cplusplus
}
#endif /* extern "C" */

#endif /* TSK_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -