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

📄 nosys.h

📁 日本的实时嵌入式操作系统norti源码
💻 H
字号:
/******************************************************************************
* 兪俬俿俼俷俶巇條俷俽 俶俷俼俿倝system撪晹掕媊僿僢僟                       *
*                                                                             *
*  File name : nosys.h                                                        *
*  Copyright (c) Miyazaki System Planning Office. 1991-1995                   *
*                                                                             *
* 91-10-25 TRCOM Version                                                      *
* 92-02-16 Ver1.00                                                            *
* 92-08-20 Ver1.10                                                            *
* 93-01-18 Ver1.11                                                            *
* 93-02-17 Ver1.12                                                            *
* 93-05-16 Ver1.13兝                                                          *
* 94-01-05 Ver1.14                                                            *
* 95-06-15 Ver1.20                                                            *
* 95-09-12 Ver1.21                                                            *
******************************************************************************/

#ifndef	NOSYS_H
#define	NOSYS_H

#ifndef	NORTI_H
#include "norti.h"
#endif

#ifdef __cplusplus
extern "C" {
#endif

/* kenel撪晹偵access偡傞応崌偵 #include 偟偰偔偩偝偄丅 */
/* 偨偩偟丄偙偙偵掕媊偝傟偰偄傞撪梕偵偮偄偰偼丄version up偵傛傝屳姺惈 */
/* 偑懝傢傟傞壜擻惈偑偁傝傑偡丅 */
/* nocfg.h, noknl.c, nomon.c 偐傜 #include 偝傟偰偄傑偡丅 */

/************************************/
/* 俠俹倀偵埶懚偡傞掕悢摍偺掕媊		*/
/************************************/
#ifdef	NORTi86

/* 戅旔context偺峔憿乮noknl.c 偐傜偼 r0, pc 偺傒嶲徠乯*/

typedef struct
{
	int stkhqq;					/* MS-C偺stack娗棟曄悢 */
	int es;
	int ds;
	int di;
	int si;
	int bp;
	int sp;
	int bx;
	int dx;
	int cx;
	int r0;						/* 栠抣register乮AX乯*/
	int filler[2];				/* 嬻偒 */
	TASKP pc;					/* program counter乮CS:IP乯*/
	int flag;

} T_CTX;

/* 峔憿懱size傪2偺椵忔偵惍偊傞掕悢 */

#define	FLG_FILLER	2			/* event flag挷惍size */
#define	SEM_FILLER	2			/* semaphore挷惍size */
#define	MBX_FILLER	4			/* mailbox挷惍size */
#define	RDQ_FILLER	0			/* ready queue僿僢僟挷惍size */

#endif

/* 86埲奜偺掕媊偺撉崬傒 */

#ifdef	NORTi80
#include "norz80.h"
#endif
#ifdef	NORTiZ80
#include "norz80.h"
#endif
#ifdef	NORTi68K
#include "nor68k.h"
#endif
#ifdef	NORTiH83
#include "norh83.h"
#endif
#ifdef	NORTiPPC
#include "norppc.h"
#endif

/************************************/
/* object摍偺峔憿懱偺掕媊		*/
/************************************/

/* 俿俠俛偺峔憿乮拲:ltime傑偱T_TMR偲摨偠峔憿乯 */

typedef packed struct t_tcb
{
	struct t_tcb NEAR *next;	/* 師偺俿俠俛/timer傊偺pointer */
	struct t_tcb NEAR *prev;	/* 慜偺俿俠俛/timer傊偺pointer */
	void NEAR *que;				/* 懸偪峴楍僿僢僟傊偺pointer */
	TASKP ipc;					/* task  start  address  */
	UINT sts;					/* task 忬懺 flag  */
	ID tid;						/* task 俬俢 */
	UH ltime;					/* 婲摦帪崗乮壓埵乯*/
	TPRI pri;					/* task 桪愭搙 */
	TPRI ipri;					/* task 弶婜桪愭搙 */
	UINT waiptn;				/* event flag懸偪pattern */
	INT wupcnt;					/* 婲彴梫媮count */
	INT suscnt;					/* 嫮惂懸偪梫媮count */
	UINT FAR *arg;				/* 戅旔堷悢 */
  #ifdef NORTi86
	int stktop;					/* stack愭摢offset address 乮NORTi/86乯*/
  #else
	B FAR *stktop;				/* stack愭摢 address 乮偦偺懠乯*/
  #endif
	T_CTX FAR *isp;				/* 弶婜stack pointer */
	T_CTX FAR *sp;				/* 戅旔stack pointer */

} T_TCB;

/* timer偺峔憿 */

typedef packed struct t_tmr
{
	struct t_tmr NEAR *next;	/* 師偺俿俠俛/timer傊偺pointer */
	struct t_tmr NEAR *prev;	/* 慜偺俿俠俛/timer傊偺pointer */
	void NEAR *que;				/* 帪娫懸偪queue僿僢僟傊偺pointer */
	TMRHDRP ipc;				/* timer handler start  address  */
	UINT sts;					/*  handler忬懺 flag  */
	ID tid;						/* 枹巊梡(0) */
	UH ltime;					/* 婲摦帪崗乮壓埵乯*/
	UH mtime;					/* 婲摦帪崗乮拞埵乯*/
	UH utime;					/* 婲摦帪崗乮忋埵乯*/
	UH defltime;				/* 掕媊偝傟偨婲摦帪娫/帪崗乮壓埵乯*/
	UH defmtime;				/* 掕媊偝傟偨婲摦帪娫/帪崗乮拞埵乯*/
	UH defutime;				/* 掕媊偝傟偨婲摦帪娫/帪崗乮忋埵乯*/

} T_TMR;

/* event flag偺峔憿 */

typedef packed struct
{
	T_TCB NEAR *head;			/* 愭摢俿俠俛傊偺pointer */
	INT qcnt;					/* 懸偪task 悢 */
	UINT ptn;					/*  flag pattern */
  #if FLG_FILLER
	VB filler[FLG_FILLER];		/* (size挷惍) */
  #endif

} T_FLG;

/* semaphore偺峔憿 */

typedef packed struct
{
	T_TCB NEAR *head;			/* 愭摢俿俠俛傊偺pointer */
	INT qcnt;					/* 懸偪task 悢 */
	INT cnt;					/* semaphore count */
  #if SEM_FILLER
	VB filler[SEM_FILLER];		/* (size挷惍) */
  #endif

} T_SEM;

/* mailbox偺峔憿 */

typedef packed struct
{
	T_TCB NEAR *head;			/* 愭摢俿俠俛傊偺pointer */
	INT qcnt;					/* 懸偪task 悢 */
  #if MBX_FILLER
	VB filler[MBX_FILLER];		/* (size挷惍) */
  #endif
	T_MSG FAR *top;				/* 愭摢 message傊偺pointer */
	T_MSG FAR *end;				/* 枛旜 message傊偺pointer */

} T_MBX;

/* memory pool偺峔憿 */

typedef packed struct
{
	T_TCB NEAR *head;			/* 愭摢俿俠俛傊偺pointer */
	INT qcnt;					/* 懸偪task 悢 */
	int frbcnt;					/* 嬻偒僽儘僢僋悢 */
	void FAR *top;				/* 愭摢block傊偺pointer */

} T_MPL;

/* ready queue僿僢僟偺峔憿 */

typedef packed struct
{
	T_TCB NEAR *head;			/* 愭摢俿俠俛傊偺pointer */
	INT qcnt;					/* 懸偪task 悢 */
  #if RDQ_FILLER
	VB filler[RDQ_FILLER];		/* (size挷惍) */
  #endif

} T_RDQ;

/************************************/
/* 掕悢偺掕媊						*/
/************************************/

/* task / handler忬懺 flag 偺峔惉 */

#define	S_HDR		0x80		/* timer handler */
#define	S_ALM		0x08		/* alarm handler */
#define	S_CYC		0x04		/* 廃婜婲摦 handler */
#define	S_ACT		0x01		/* 廃婜婲摦 handler妶惈乮= TCY_ON乯 */

#define	S_SLP		0x40		/* 扨弮懸婡乮slp_tsk乯 */
#define	S_QUE		0x3f		/* 壗傜偐偺懸偪峴楍偵宷偑傟偨忬懺 */
#define	S_RDY		0x20		/* READY忬懺乮RUN傪娷傓乯*/
#define	S_WAI		0x10		/* 帪娫懸偪乮wai_tsk乯*/
#define	S_MPL		0x08		/* memory block懸偪乮get_blk乯*/
#define	S_FLG		0x04		/* event flag懸偪乮wai_flg乯*/
#define	S_ORW		0x02		/* OR懸偪(1)/AND懸偪(0)乮= TWF_ORW乯*/
#define	S_CLR		0x01		/* clear 偁傝乮= TWF_CLR乯*/
#define	S_SEM		0x02		/* semaphore懸偪乮wai_sem乯 */
#define	S_MBX		0x01		/*  message懸偪乮rcv_msg乯 */
#define	S_DMT		0x00		/* DORMANT忬懺乮NON-EXISTENT傪娷傓乯*/

/************************************/
/* object偺掕媊				*/
/************************************/

/* system梡object掕悢乮乣0乯*/

#define	TSKID_MIN	0			/* task 俬俢壓尷 */
#define	FLGID_MIN	0			/* event flag俬俢壓尷 */
#define	SEMID_MIN	0			/* semaphore俬俢壓尷 */
#define	MBXID_MIN	0			/* mailbox俬俢壓尷 */
#define	MPLID_MIN	0			/* memory pool俬俢壓尷 */
#define	CYHNO_MIN	0			/* 廃婜婲摦 handler斣崋壓尷 */
#define	ALHNO_MIN	0			/* alarm handler斣崋壓尷 */

/* object */
/* MCC68K 嵟揔壔偺偨傔丄[2]偱攝楍愰尵 */

#ifndef	NOCFG_H
extern T_TCB NEAR cdecl _TCB[2];
extern T_FLG NEAR cdecl _FLG[2];
extern T_SEM NEAR cdecl _SEM[2];
extern T_MBX NEAR cdecl _MBX[2];
extern T_MPL NEAR cdecl _MPL[2];
extern T_TMR NEAR cdecl _CYH[2];
extern T_TMR NEAR cdecl _ALH[2];
extern T_RDQ NEAR cdecl RDQ[2];
extern T_RDQ NEAR cdecl TMQ[256];
extern T_TCB NEAR * NEAR cdecl _pTCB[2];
extern T_MPL NEAR * NEAR cdecl _pMPL[2];
extern T_TMR NEAR * NEAR cdecl _pCYH[2];
extern T_TMR NEAR * NEAR cdecl _pALH[2];
#endif

/* 忋婰攝楍access梡macro  */

#define	TCB		(_TCB-(TSKID_MIN))
#define	FLG		(_FLG-(FLGID_MIN))
#define	SEM		(_SEM-(SEMID_MIN))
#define	MBX		(_MBX-(MBXID_MIN))
#define	MPL		(_MPL-(MPLID_MIN))
#define	CYH		(_CYH-(CYHNO_MIN))
#define	ALH		(_ALH-(ALHNO_MIN))

#define	pTCB	(_pTCB-(TSKID_MIN))
#define	pMPL	(_pMPL-(MPLID_MIN))
#define	pCYH	(_pCYH-(CYHNO_MIN))
#define	pALH	(_pALH-(ALHNO_MIN))

/* count抣忋尷乮1乣UINT偺忋尷,-1偱嵟戝乯 */

#define	WUPCNT_MAX	(-1)		/* 婲彴梫媮count抣忋尷 */
#define	SUSCNT_MAX	(-1)		/* 嫮惂懸偪梫媮count抣忋尷 */
#define	SEMCNT_MAX	(-1)		/* semaphore count抣忋尷 */

/************************************/
/* 偦偺懠kenel撪晹曄悢偺愰尵		*/
/************************************/

extern T_VER FAR cdecl NORTI_VER;	/* version */

extern T_TIME NEAR cdecl SYSCLK;	/* system clock */
extern T_CTX NEAR cdecl CTX;		/* 弶婜context */
extern UINT NEAR cdecl IMASK;		/* 拞抐mask flag  */
extern B NEAR cdecl INEST;			/* 拞抐nest counter乮尭count乯*/
extern B NEAR cdecl DELAY;			/* 抶墑dispatch 梫媮 flag  */
extern TPRI NEAR cdecl NOWPRI;		/* 尰嵼偺task 桪愭搙 */
extern UH NEAR cdecl IDLE_LOOP_CNT;	/* idle loop counter */
extern ER NEAR cdecl SYSER;			/* system error code   */
extern B FAR * NEAR cdecl USP;		/* user  stack pointer抣 */ 
extern B FAR * NEAR cdecl ISP;		/* 拞抐stack pointer弶婜抣 */

#ifdef NORTiH83
extern UW NEAR cdecl STKLEN;		/* 巆傝stack挿乮NORTi/H83乯*/
#else
extern unsigned NEAR cdecl STKLEN;	/* 巆傝stack挿乮偦偺懠乯*/
#endif

#ifdef	OLDVER
extern INT near cdecl TSKCNT;		/* 婲摦偝傟偨task 悢乮媽巇條乯*/
#endif

#ifdef __cplusplus
};
#endif

#endif
 

⌨️ 快捷键说明

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