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

📄 rtos.h

📁 This project should serve as an "easy start" with embOS. All pathes are relative to the project fil
💻 H
📖 第 1 页 / 共 4 页
字号:
/* 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 + -