📄 azrtos.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 + -