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

📄 azrtos.h

📁 this is RealTimeOS(uITRON) for hitachi H8 processor.
💻 H
字号:
/*
 *	azrtos.h - AzkiRTOS public interface declaration
 *	Copyright 1999, Anchor Systems Corporation
 *	All rights reserved.
 *
 *	偙偺僼傽僀儖偼丄AzkiRTOS偺堦晹暘偱偡丅
 *	偙偺僼傽僀儖偺偺挊嶌尃偼傾儞僇乕僔僗僥儉僘姅幃夛幮偵懏偟傑偡偑丄
 *	扤偱傕僼傽僀儖傪柍曄峏丄傑偨偼曄峏偟偰帺桼偵巊偆偙偲偑偱偒傑偡丅
 *	傑偨柍彏偱嵞攝晍偡傞偙偲傕壜擻偱偡偑丄僆儕僕僫儖偺挊嶌尃昞帵傪
 *	偦偺傑傑偺宍偱娷傔偰偔偩偝偄丅
 *
 *	偨偩偟丄柍曄峏傑偨偼曄峏偟偨傕偺傪惢昳偺堦晹偲偟偰偱偼側偔丄
 *	儕傾儖僞僀儉OS偦偺傕偺偲偟偰柍抐偱嵞斕攧偡傞偙偲偼偱偒傑偣傫丅
 *
 *	傾儞僇乕僔僗僥儉僘(姅)偼丄柍曄峏傑偨偼曄峏偟偨AzkiRTOS傪慻傒崬傫偩
 *	惢昳偺晄嬶崌偵懳偟偰堦愗愑擟傪晧偆傕偺偱偼偁傝傑偣傫丅AzkiRTOS傪
 *	娷傔AzkiRTOS傪慻傒崬傫偩惢昳慡懱偺摦嶌曐徹偼丄AzkiRTOS傪慻傒崬傫偩
 *	惢昳偺奐敪幰偺愑擟偲側傝傑偡丅
 *
 *	$Revision: 8 $
 *	$Archive: /AnchorPlace/goodies/AzRTOS/azrtos.h $
 */

#ifndef __AZRTOS_H__
#define __AZRTOS_H__

/* 師峴偺僐儊儞僩傪奜偡偲丄僔儈儏儗乕僞偱偺僨僶僢僌偱彆偗偵側傞僐乕僪傪惗惉偟傑偡 */
#define _AZDEBUG

#ifndef __ASCONF_H__
#include "azconf.h"
#endif

#if defined(NC30)
#  define __aztiny
#  define __aznear	_near
#  define __azfar	_far
#else
#  error Port me to your new system!!
#endif


/****************************************************************************
 * uITRON style symbols
 ****************************************************************************/

typedef signed char		B;
typedef signed short	H;
typedef signed long		W;
typedef unsigned char	UB;
typedef unsigned short	UH;
typedef unsigned long	UW;

typedef unsigned char	VB;			/* 僨乕僞僞僀僾偑堦掕偱側偄8-bit僨乕僞 */
typedef unsigned short	VH;			/* 僨乕僞僞僀僾偑堦掕偱側偄16-bit僨乕僞 */
typedef unsigned long	VW;			/* 僨乕僞僞僀僾偑堦掕偱側偄32-bit僨乕僞 */
typedef void __azfar *	VP;			/* 僨乕僞僞僀僾偑堦掕偱側偄億僀儞僞 */
typedef void __aznear *	VNP;		/* 僨乕僞僞僀僾偑堦掕偱側偄near椞堟傊偺億僀儞僞 */

typedef void 			(*FP)();	/* 僾儘僌儔儉僗僞乕僩傾僪儗僗 */

typedef signed int		INT;		/* 晞崋晅偒惍悢 */
typedef unsigned int	UINT;		/* 晞崋側偟惍悢 */
typedef int				BOOL;		/* 僽乕儖抣 */
typedef int				FN;			/* 婡擻僐乕僪 */
typedef VNP				ID;			/* 僆僽僕僃僋僩幆暿巕(僆僽僕僃僋僩偺傾僪儗僗偱戙梡) */
typedef int				BOOL_ID;	/* 僽乕儖抣傑偨偼ID斣崋 */
typedef int				HNO;		/* 僴儞僪儔斣崋 */
typedef int				RNO;		/* 儔儞僨僽斣崋 */
typedef int				NODE;		/* 僲乕僪斣崋 */
typedef unsigned		ATR;		/* 僆僽僕僃僋僩懏惈 */
typedef int				ER;			/* 僄儔乕僐乕僪 */
typedef int				PRI;		/* 僞僗僋桪愭弴埵 */
typedef int				TMO;		/* 僞僀儉傾僂僩帪娫 */
typedef int				DLYTIME;	/* 僨傿儗僀帪娫 */

#define TMO_POL			0			/* 億乕儕儞僌 */
#define TMO_FEVR		-1			/* 僞僀儉傾僂僩側偟 */

struct t_systim
{
	UH		m_low;					/* msec扨埵偺僔僗僥儉帪娫 壓16-bit */
	UH		m_mid;					/*          乂            拞16-bit */
	H		m_high;					/*          乂            忋16-bit */
};

typedef struct t_systim	SYSTIME;

#define TA_ASM			0x0000		/* 傾僙儞僽儕尵岅偱婰弎偟偨僾儘僌儔儉 */
#define TA_HLNG			0x0001		/* 崅媺尵岅偱婰弎偟偨僾儘僌儔儉 */
#define TA_COP0			0x8000		/* ID=0偺僐僾儘僙僢僒傪巊梡 */

#define TRUE			1
#define FALSE			0			/* 僞僗僋撈棫晹傪昞傢偡 */
#define TSK_SELF		NULL		/* 帺僞僗僋 */

#define TPRI_INI		0			/* 僞僗僋婲摦帪偺弶婜桪愭弴埵 */
#define TPRI_RUN		0			/* 幚峴拞偺嵟崅桪愭弴埵傪巜掕 */

struct t_rtsk
{
	PRI		tskpri;					/* 尰嵼偺桪愭弴埵 */
	UINT	tskstat;				/* 僞僗僋偺忬懺 */
	UINT	tskwait;				/* 懸偪梫場 */

	/* TODO: 傕偭偲懠偵僞僗僋偺忬懺傪挷傋傞昁梫偑偁傞偲偒偼丄偙偙傊捛壛偡傞 */
};

typedef struct t_rtsk	T_RTSK;

#define TTS_RUN			0x0001		/* RUN忬懺 */
#define TTS_RDY			0x0002		/* READY忬懺 */
#define TTS_WAI			0x0004		/* WAIT忬懺 */
#define TTS_SUS			0x0008		/* SUSPEND忬懺 */
#define TTS_WAS			0x000c		/* WAIT-SUSPEND忬懺 */
#define TTS_DMT			0x0010		/* DOMANT忬懺 */

#define TTW_SLP			0x0001		/* slp_tsk, tslp_tsk 偵傛傞懸偪 */
#define TTW_DLY			0x0002		/* dly_tsk 偵傛傞懸偪 */
#define TTW_NOD			0x0008		/* 愙懕墳摎懸偪 */
#define TTW_FLG			0x0010		/* wai_flg, twai_flg 偵傛傞懸偪 */
#define TTW_SEM			0x0020		/* wai_sem, twai_sem 偵傛傞懸偪 */
#define TTW_MBX			0x0040		/* rcv_msg, trcv_msg 偵傛傞懸偪 */
#define TTW_SMBF		0x0080		/* snd_msg, tsnd_msg 偵傛傞懸偪 */
#define TTW_MBF			0x0100		/* rcv_mbf, trcv_mbf 偵傛傞懸偪 */

#define TA_TFIFO		0x0000		/* 懸偪僞僗僋偼FIFO */
#define TA_TPRI			0x0001		/* 懸偪僞僗僋偼桪愭搙弴 */

struct t_rsem
{
	BOOL_ID	wtsk;					/* 懸偪僞僗僋偺桳柍 */
	INT		semcnt;					/* 僙儅僼僅僇僂儞僩抣 */
};

typedef struct t_rsem	T_RSEM;

/* error code */

#define E_OK			0			/* 惓忢廔椆 */
#define E_SYS			-5			/* 僔僗僥儉僄儔乕 */
#define E_NOMEM			-10			/* 儊儌儕晄懌 */
#define E_NOSPT			-17			/* 枹僒億乕僩婡擻 */
#define E_INOSPT		-18			/* ITRON/FILE偱偺枹僒億乕僩婡擻 */
#define E_RSFN			-20			/* 梊栺婡擻僐乕僪斣崋 */
#define E_RSATR			-24			/* 梊栺懏惈 */
#define E_PAR			-33			/* 僷儔儊僞僄儔乕 */
#define E_ID			-35			/* 晄惓ID斣崋 */
#define E_NOEXS			-52			/* 懚嵼偟側偄僆僽僕僃僋僩 */
#define E_OBJ			-63			/* 僆僽僕僃僋僩偺忬懺偑晄惓 */
#define E_MACV			-65			/* 晄惓儊儌儕傾僋僙僗 */
#define E_OACV			-66			/* 晄惓僆僽僕僃僋僩傾僋僙僗 */
#define E_CTX			-69			/* 僐儞僥僉僗僩僄儔乕 */
#define E_QOVR			-73			/* 僉儏乕僀儞僌傗僱僗僩偺僆乕僶乕僼儘乕 */
#define E_DLT			-81			/* 懸偪僆僽僕僃僋僩偑嶍彍偝傟偨 */
#define E_TMOUT			-85			/* 僞僀儉傾僂僩 */
#define E_RLWAI			-86			/* 懸偪忬懺嫮惂夝彍 */

/* system call (task level) */

void	vini_sys(void);
void	vini_tsk(ID tskid, FP entry, PRI tskpri, VNP stack, UINT size);
void	vini_sem(ID semid, INT inival);

ER		sta_tsk(ID tskid, INT stacd);
void	ext_tsk(void);
ER		ter_tsk(ID tskid);
ER		dis_dsp(void);
ER		ena_dsp(void);
ER		chg_pri(ID tskid, PRI tskpri);
ER		rot_rdq(PRI tskpri);
ER		rel_wai(ID tskid);
ER		get_tid(ID* p_tskid);
ER		ref_tsk(T_RTSK* pk_rtsk, ID tskid);

#define	slp_tsk()			tslp_tsk(TMO_FEVR)
ER		tslp_tsk(TMO tmout);
ER		wup_tsk(ID tskid);
ER		can_wup(INT* p_wupcnt, ID tskid);

ER		sig_sem(ID semid);
#define	wai_sem(semid)		twai_sem((semid), TMO_FEVR)
#define	preq_sem(semid)		twai_sem((semid), TMO_POL)
ER		twai_sem(ID semid, TMO tmout);
ER		ref_sem(T_RSEM* pk_rsem, ID semid);

ER		set_tim(SYSTIME* pk_tim);
ER		get_tim(SYSTIME* pk_tim);
ER		dly_tsk(DLYTIME dlytim);

/* system call (handler level) */

ER		ichg_pri(ID tskid, PRI tskpri);
ER		irot_rdq(PRI tskpri);
ER		irel_wai(ID tskid);
ER		iwup_tsk(ID tskid);
ER		isig_sem(ID semid);
ER		iref_sem(T_RSEM* pk_rsem, ID semid);
ER		iset_tim(SYSTIME* pk_tim);
ER		iget_tim(SYSTIME* pk_tim);
void	ret_int(void);

#ifdef NC30
#  pragma MRCALL 32  0	sta_tsk(R1, R2)
#  pragma MRCALL 32  1	ext_tsk()
#  pragma MRCALL 32  2	ter_tsk(R1)
#  pragma MRCALL 32  3	dis_dsp()
#  pragma MRCALL 32  4	ena_dsp()
#  pragma MRCALL 32  5	chg_pri(R1, R2)
#  pragma MRCALL 32  6	rot_rdq(R1)
#  pragma MRCALL 32  7	rel_wai(R1)
#  pragma MRCALL 32  8	get_tid(R1)
#  pragma MRCALL 32  9	ref_tsk(R1, R2)
#  pragma MRCALL 32 10	tslp_tsk(R1)
#  pragma MRCALL 32 11	wup_tsk(R1)
#  pragma MRCALL 32 12	can_wup(R1, R2)
#  pragma MRCALL 32 13	sig_sem(R1)
#  pragma MRCALL 32 14	twai_sem(R1, R2)
#  pragma MRCALL 32 15	ref_sem(R1, R2)
#  pragma MRCALL 32 16	set_tim(R1)
#  pragma MRCALL 32 17	get_tim(R1)
#  pragma MRCALL 32 18	dly_tsk(R1)
#  pragma INTCALL 34	ret_int()
#endif /* NC30 */


/****************************************************************************
 * AzkiRTOS specific data types
 ****************************************************************************/

/* Double-Linked List */

struct t_azlink
{
	struct t_azlink __aznear *	m_next;
	struct t_azlink __aznear *	m_prev;
};

typedef struct t_azlink	AzLink;

/* Task Control Block (28 bytes per task) */

struct t_aztcb
{
	AzLink	m_mainlink;				/* +00 儊僀儞儕儞僋 */
	AzLink	m_timelink;				/* +04 僞僀儉傾僂僩娗棟儕儞僋 */

	UB		m_id;					/* +08 惍悢ID (僨僶僢僈偱偺僩儔僢僉儞僌梡) */
	UB		m_state;				/* +09 忬懺 TTS_* */
	UB		m_attr;					/* +10 僞僗僋偺懏惈 (梊栺-尰嵼偼枹巊梡) */
	UB		m_initpri;				/* +11 弶婜桪愭弴埵 */
	UB		m_priority;				/* +12 桪愭弴埵 (0乣AZ_NPRIORITIES-1 彫偝偄傎偳桪愭) */
	UB		m_waitfor;				/* +13 TTS_WAI 偱壗傪懸偭偰偄傞偐 */

	TMO		m_timeout;				/* +14 僞僀儉傾僂僩帪娫 */
	INT		m_wupcnt;				/* +16 wakeup 偺僇僂儞僩 */

	FP		m_entry;				/* +18 擖傝岥娭悢偺傾僪儗僗 */
	UH		m_usp;					/* +22 儐乕僓僗僞僢僋億僀儞僞偺曐懚応強 */
	VNP		m_stackarea;			/* +24 僗僞僢僋椞堟傊偺億僀儞僞 */
	UH		m_stacksize;			/* +26 僗僞僢僋椞堟偺僶僀僩悢 */

	int		m_errno;				/* +28 僞僗僋枅偺 errno */
};

typedef struct t_aztcb	AzTCB;

/* Semaphore (8 bytes per semaphore) */

struct t_azsemaphore
{
	AzLink	m_queue;				/* +00 僙儅僼僅懸偪偺僉儏乕 */
	INT		m_count;				/* +04 僙儅僼僅僇僂儞僞 */
	UB		m_id;					/* +06 惍悢ID (僨僶僢僈偱偺僩儔僢僉儞僌梡) */
	UB		m_attr;					/* +07 僙儅僼僅懏惈 (梊栺-尰嵼偼枹巊梡) */
};

typedef struct t_azsemaphore AzSemaphore;


/****************************************************************************
 * Debugging support macros and functions
 ****************************************************************************/

#ifdef _AZDEBUG
   extern void az_assertion_failed(const char __azfar * file, int line);
#  define ASSERT(expr)	if (!(expr)) az_assertion_failed(__FILE__, __LINE__)
#  define VERIFY(expr)	if (!(expr)) az_assertion_failed(__FILE__, __LINE__)
#  define TRACE(msg)	az_assertion_failed(msg, 0)
#else
#  define ASSERT(expr)
#  define VERIFY(expr)	(expr)
#  define TRACE(msg)
#endif /* _AZDEBUG */

#endif /* __AZRTOS_H__ */

⌨️ 快捷键说明

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