📄 rtos.h
字号:
/* stack overflow or invalid stack */
#define OS_ERR_STACK (120)
/* invalid or non-initialized data structures */
#define OS_ERR_INV_TASK (128)
#define OS_ERR_INV_TIMER (129)
#define OS_ERR_INV_MAILBOX (130)
#define OS_ERR_INV_CSEMA (132)
#define OS_ERR_INV_RSEMA (133)
/* Using GetMail1 or PutMail1 or GetMailCond1 or PutMailCond1 on
a non-1 byte mailbox */
#define OS_ERR_MAILBOX_NOT1 (135)
/* internal errors, please contact SEGGER Microcontrollersysteme */
#define OS_ERR_MAILBOX_NOT_IN_LIST (140)
#define OS_ERR_TASKLIST_CORRUPT (142)
/* not matching routine calls or macro usage */
#define OS_ERR_UNUSE_BEFORE_USE (150)
#define OS_ERR_LEAVEREGION_BEFORE_ENTERREGION (151)
#define OS_ERR_LEAVEINT (152)
#define OS_ERR_DICNT (153)
#define OS_ERR_INTERRUPT_DISABLED (154)
#define OS_ERR_TASK_ENDS_WITHOUT_TERMINATE (155)
#define OS_ERR_ILLEGAL_IN_ISR (160) /* not a legal system call during interrupt */
#define OS_ERR_ILLEGAL_IN_TIMER (161) /* not a legal system call during timer */
#define OS_ERR_ILLEGAL_OUT_ISR (162) /* not a legal system call outside interrupt */
/* double used data structures */
#define OS_ERR_2USE_TASK (170)
#define OS_ERR_2USE_TIMER (171)
#define OS_ERR_2USE_MAILBOX (172)
#define OS_ERR_2USE_BSEMA (173)
#define OS_ERR_2USE_CSEMA (174)
#define OS_ERR_2USE_RSEMA (175)
/* Communication errors (OSCOM) */
#define OS_ERR_NESTED_RX_INT (180)
/* Fixed block memory pool */
#define OS_ERR_MEMF_INV (190)
#define OS_ERR_MEMF_INV_PTR (191)
#define OS_ERR_MEMF_PTR_FREE (192)
#define OS_ERR_MEMF_RELEASE (193)
/* Task suspend / resume errors */
#define OS_ERR_SUSPEND_TOO_OFTEN (200)
#define OS_ERR_RESUME_BEFORE_SUSPEND (201)
/* Event object */
#define OS_ERR_EVENTOBJ_INV (210)
#define OS_ERR_2USE_EVENTOBJ (211)
/*********************************************************************
*
* Trace identifier
*
**********************************************************************
Identifier from 0 to 99 are reserved for embOS
Even when not all of those are currently used,
they may be defined in the future
*/
#define OS_TRACE_ID_DEACTIVATE (1)
#define OS_TRACE_ID_ACTIVATE (2)
#define OS_TRACE_ID_TIMERCALLBACK (3)
/* Task group */
#define OS_TRACE_ID_DELAY (10)
#define OS_TRACE_ID_DELAYUNTIL (11)
#define OS_TRACE_ID_SETPRIORITY (12)
#define OS_TRACE_ID_WAKETASK (13)
#define OS_TRACE_ID_CREATETASK (14)
#define OS_TRACE_ID_TERMINATETASK (15)
#define OS_TRACE_ID_SUSPENDTASK (16)
#define OS_TRACE_ID_RESUMETASK (17)
/* Event group */
#define OS_TRACE_ID_WAITEVENT (20)
#define OS_TRACE_ID_WAITEVENT_TIMED (21)
#define OS_TRACE_ID_SIGNALEVENT (22)
#define OS_TRACE_ID_CLEAREVENTS (23)
/* Mailbox group */
#define OS_TRACE_ID_CREATEMB (30)
#define OS_TRACE_ID_CLEARMB (31)
#define OS_TRACE_ID_DELETEMB (32)
#define OS_TRACE_ID_PUTMAIL (33)
#define OS_TRACE_ID_GETMAIL (34)
#define OS_TRACE_ID_PUTMAILCOND (35)
#define OS_TRACE_ID_GETMAILCOND (36)
#define OS_TRACE_ID_PUTMAIL_TIMED (37)
#define OS_TRACE_ID_GETMAIL_TIMED (38)
#define OS_TRACE_ID_WAITMAIL (39)
#define OS_TRACE_ID_PUTMAIL1 (40)
#define OS_TRACE_ID_GETMAIL1 (41)
#define OS_TRACE_ID_PUTMAILCOND1 (42)
#define OS_TRACE_ID_GETMAILCOND1 (43)
#define OS_TRACE_ID_PUTMAIL_TIMED1 (44)
#define OS_TRACE_ID_GETMAIL_TIMED1 (45)
#define OS_TRACE_ID_PUTMAIL_F (46)
#define OS_TRACE_ID_PUTMAIL_F1 (47)
#define OS_TRACE_ID_PUTMAIL_FCOND (48)
#define OS_TRACE_ID_PUTMAIL_FCOND1 (49)
/* Resource group */
#define OS_TRACE_ID_CREATERSEMA (50)
#define OS_TRACE_ID_USE (51)
#define OS_TRACE_ID_UNUSE (52)
#define OS_TRACE_ID_REQUEST (53)
#define OS_TRACE_ID_GETSEMAVALUE (54)
/* Counting Semaphore group */
#define OS_TRACE_ID_CREATECSEMA (60)
#define OS_TRACE_ID_DELETECSEMA (61)
#define OS_TRACE_ID_SIGNALCSEMA (62)
#define OS_TRACE_ID_WAITCSEMA (63)
#define OS_TRACE_ID_WAITCSEMATIMED (64)
/* Timer group */
#define OS_TRACE_ID_CREATETIMER (70)
#define OS_TRACE_ID_DELETETIMER (71)
#define OS_TRACE_ID_STARTTIMER (72)
#define OS_TRACE_ID_STOPTIMER (73)
#define OS_TRACE_ID_RETRIGGERTIMER (74)
#define OS_TRACE_ID_SETTIMERPERIOD (75)
/* Heap type memory management */
#define OS_TRACE_ID_MALLOC (80)
#define OS_TRACE_ID_FREE (81)
#define OS_TRACE_ID_REALLOC (82)
/* Fixed block type memory management */
#define OS_TRACE_ID_MEMF_CREATE (90)
#define OS_TRACE_ID_MEMF_DELETE (91)
#define OS_TRACE_ID_MEMF_ALLOC (92)
/*********************************************************************
*
* Assertions
*
**********************************************************************
Assertions are used to generate code in the debug version
of embOS in order catch programming faults like
bad pointers or uninitialized data structures
*/
#if OS_DEBUG
#define OS_ASSERT(Exp, ErrCode) { if (!(Exp)) OS_Error(ErrCode); }
#else
#define OS_ASSERT(Exp, ErrCode)
#endif
#define OS_ASSERT_INT() OS_ASSERT((OS_InInt !=0), OS_ERR_ILLEGAL_OUT_ISR)
#define OS_ASSERT_NOINT() OS_ASSERT((OS_InInt ==0), OS_ERR_ILLEGAL_IN_ISR)
#define OS_ASSERT_NOTIMER() OS_ASSERT((OS_InTimer==0), OS_ERR_ILLEGAL_IN_TIMER)
#define OS_ASSERT_DICnt() OS_ASSERT(((OS_DICnt&0xf0)==0) , OS_ERR_DICNT)
/*********************************************************************
*
* Memory attributes
*
**********************************************************************
*/
#ifndef OS_STACKPTR
#define OS_STACKPTR
#endif
#ifndef OS_SADDR
#ifdef SADDR
#define OS_SADDR SADDR
#else
#define OS_SADDR
#endif
#endif
/* pointer modifier for data items */
#ifndef OS_DATAPTR
#define OS_DATAPTR
#endif
#ifndef OS_RSEMAPTR
#define OS_RSEMAPTR
#endif
#ifndef OS_CSEMAPTR
#define OS_CSEMAPTR
#endif
#ifndef OS_MBPTR
#define OS_MBPTR
#endif
#ifndef OS_TCBPTR
#define OS_TCBPTR
#endif
#ifndef OS_TIMERPTR
#define OS_TIMERPTR
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*********************************************************************
*
* Data structures
*
**********************************************************************
*/
typedef struct OS_task OS_TASK;
typedef void voidRoutine(void);
typedef void OS_RX_CALLBACK(OS_U8 Data);
typedef void OS_TIMERROUTINE(void);
typedef void OS_TIMER_EX_ROUTINE(void *);
typedef void OS_ON_TERMINATE_FUNC(OS_TASK *);
typedef union {
int v;
void OS_DATAPTR * p;
} OS_TASKDATA;
struct OS_task {
/* Start of assembly relevant section */
OS_TASK *pNext; /* Off = 0/0/0 */
OS_U8 OS_STACKPTR *pStack; /* Off = 2/4/4 */
/* End of assembly relevant section */
OS_TASKDATA Data; /* Off = 4/6/8 */
OS_U8 Priority; /* Off = 6/10/12 */
OS_U8 Stat; /* Off = 7/11/13 */
#if OS_RR_SUPPORTED
OS_U8 TimeSliceRem;
OS_U8 TimeSliceReload;
#endif
#if OS_TRACKNAME
const char * Name;
#endif
OS_TASK *pPrev;
#if OS_SUPPORT_TIMEOUT
int Timeout;
#endif
#if OS_CHECKSTACK
OS_UINT StackSize;
#if !__OS_STACK_AT_BOTTOM__
OS_U8 OS_STACKPTR* pStackBot;
#endif
#endif
#if OS_PROFILE
OS_U32 ExecTotal; /* Time spent executing */
OS_U32 ExecLast; /* Time spent executing (Reference) */
OS_U32 NumActivations;
OS_U32 NumPreemptions;
OS_U32 Load;
#if OS_PROFILE >= 2
OS_U32 ReactionTimeSys_TS; /* Time stamp for reaction measurement */
OS_U32 ReactionTimeSys_Cycles;
OS_U32 ReactionTimeSysMax_Cycles;
#endif
#endif
#if OS_SUPPORT_CLEANUP_ON_TERMINATE
OS_ON_TERMINATE_FUNC * pfOnTerminate;
#endif
OS_U8 Events;
#if OS_DEBUG
char Id;
#endif
#ifdef OS_TCB_CPU_EX
OS_TCB_CPU_EX
#endif
};
typedef struct OS_timer OS_TIMER;
struct OS_timer {
OS_TIMER * pNext;
voidRoutine* Hook;
int Time;
int Period;
char Active;
#if OS_DEBUG
char Id;
#endif
};
typedef struct {
OS_TIMER Timer;
OS_TIMER_EX_ROUTINE * pfUser;
void * pData;
} OS_TIMER_EX;
typedef struct OS_rsema OS_RSEMA;
struct OS_rsema {
OS_TASK * pTask;
OS_U8 UseCnt;
OS_U8 WaitCnt;
#if OS_LINK_RESOURCE_SEMAS
OS_RSEMA * pNext;
#endif
#if OS_DEBUG
char Id;
#endif
};
typedef struct OS_csema OS_CSEMA;
struct OS_csema {
OS_U8 Cnt;
OS_U8 WaitCnt;
#if OS_DEBUG
OS_CSEMA * pNext;
char Id;
#endif
};
typedef struct {
/* void *pNext; */
char *pData;
OS_UINT nofMsg;
OS_UINT maxMsg;
OS_UINT iRd;
OS_U8 sizeofMsg;
OS_U8 WaitCntNE;
OS_U8 WaitCntNF;
#if OS_DEBUG
char Id;
#endif
} OS_MAILBOX;
typedef struct OS_q OS_Q;
struct OS_q {
OS_Q* pNext; /* ptr to next queue (for debugging / monitoring) */
OS_U8* pData;
OS_UINT Size;
OS_UINT MsgCnt;
OS_UINT offFirst;
OS_UINT offLast;
OS_U8 WaitCnt; /* Number of waiting tasks */
#if OS_DEBUG
char Id;
#endif
};
typedef struct {
OS_U32 Time;
void *pCurrentTask;
void *p;
OS_U32 v;
OS_U8 iRout;
} OS_TRACE_ENTRY;
#ifndef OS_MEMF_MAX_ITEMS
#define OS_MEMF_MAX_ITEMS 20
#endif
#define OS_MEMF_SIZEOF_BLOCKCONTROL 0 /* sizeof(int) in future version for debugging */
typedef struct OS_memf OS_MEMF;
struct OS_memf {
OS_MEMF* pNext; /* ptr to next memory pool */
void* pPool;
OS_U16 NumBlocks;
OS_U16 BlockSize;
OS_U16 NumFreeBlocks;
OS_U16 MaxUsed;
OS_U8 WaitCnt;
void* pFree;
#if OS_DEBUG
int aiPurpose[OS_MEMF_MAX_ITEMS];
char Id;
#endif
};
/****** Data types, constants and structures of event object module *****/
#define OS_EVENT_WAIT_ALL 2
#define OS_EVENT_WAIT_ANY 3
#define OS_EVENT_NOERROR 0
#define OS_EVENT_ERR_TIMEOUT 1
#define OS_EVENT_ERR_DELETED 2
typedef OS_U16 OS_EVENT_MASK;
typedef struct OS_EVENT OS_EVENT;
typedef struct OS_EVENTOBJ OS_EVENTOBJ;
struct OS_EVENT { /* Event entry */
OS_EVENT* pNext; /* Pointer to next EVENT in wait list */
OS_EVENT* pPrev; /* Pointer to previous EVENT in wait list */
OS_TASK* pTask; /* Pointer to TCB of waiting task */
OS_EVENTOBJ* pEventObj; /* Pointer to Event Object */
OS_EVENT_MASK Events; /* Events to wait on */
OS_U8 WaitType; /* Type of wait: */
/* OS_EVENT_WAIT_ALL */
/* OS_EVENT_WAIT_ANY */
};
struct OS_EVENTOBJ {
OS_EVENT_MASK Events;
OS_EVENT* pEventList;
#if OS_DEBUG
char Id;
#endif
};
/*********************************************************************
*
* Globals
*
**********************************************************************
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -