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

📄 rtos.h

📁 这是一个富士通单片机调试软件
💻 H
📖 第 1 页 / 共 4 页
字号:
#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)

/* not a legal system call during interrupt */
#define OS_ERR_ILLEGAL_IN_ISR                 (160)
/* not a legal system call during timer */
#define OS_ERR_ILLEGAL_IN_TIMER               (161)

/* 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)


/********************************************************************
*
*                  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)

/* 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_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)

/* 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)



/*********************************************************************
*
*                      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_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

#ifndef OS_DEFFUNC
  #define OS_DEFFUNC
#endif

#ifndef OS_TICK_FUNC
  #define OS_TICK_FUNC OS_DEFFUNC
#endif

#ifndef OS_ASM_FUNC 
  #define OS_ASM_FUNC 
#endif

#ifndef OS_DEFPTR
  #define OS_DEFPTR
#endif

/* pointer modifier for data items */
#ifndef OS_DATAPTR
  #define OS_DATAPTR OS_DEFPTR
#endif

#ifndef OS_RSEMAPTR
  #define OS_RSEMAPTR OS_DEFPTR
#endif

#ifndef OS_CSEMAPTR
  #define OS_CSEMAPTR OS_DEFPTR
#endif

#ifndef OS_MBPTR
  #define OS_MBPTR OS_DEFPTR
#endif

#ifndef OS_TCBPTR
  #define OS_TCBPTR OS_DEFPTR
#endif

#ifndef OS_TIMERPTR
  #define OS_TIMERPTR OS_DEFPTR
#endif

#if OS_SUPPORT_DIAG
  void OS_MarkCall(void);
  #define OS_MARKCALL() OS_MarkCall(),
#else
  #define OS_MARKCALL()
#endif


#ifdef __cplusplus
  extern "C" {
#endif




/*
         ********************************************************
         *                                                      *
         *       Data structures                                *
         *                                                      *
         ********************************************************
*/

typedef void voidRoutine(void);
typedef void OS_RX_CALLBACK(OS_U8 Data);
typedef void OS_TIMERROUTINE(void);

typedef struct OS_task OS_TASK;
struct OS_task {
/* Start of assembly relevant section */
  OS_TASK  OS_DEFPTR   *pNext;          /*  Off = 0/0/0 */
  OS_U8    OS_STACKPTR *pStack;       /*  Off = 2/4/4 */
/* End of assembly relevant section */
  union {
    int v;
    void     OS_DATAPTR * p;
  } Data;                            /*  Off = 4/6/8 */
  OS_U8 Priority;                       /*  Off = 6/10/12 */
  OS_U8 Stat;                         /*  Off = 7/11/13 */
  #if __OS_RRSUPPORTED__
    OS_U8  TimeSliceRem;
    OS_U8  TimeSliceReload;
  #endif
  #if OS_TRACKNAME
    const char OS_DEFPTR * Name;
  #endif
  void  OS_DEFPTR * 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_DIAG
    voidRoutine* LastCall;
  #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 OS_DEFPTR * pNext;
  voidRoutine* Hook;
  int   Time;
  int   Period;
  char  Active;
#if OS_DEBUG
  char Id;
#endif
};

typedef struct {
  OS_TASK OS_DEFPTR * pTask;
  OS_U8 UseCnt;
  OS_U8 WaitCnt;
#if OS_DEBUG
  void * pNext;
  char Id;
#endif
} OS_RSEMA;

typedef struct OS_csema OS_CSEMA;
struct OS_csema {
  OS_U8 Cnt;
  OS_U8 WaitCnt;
#if OS_DEBUG
  void OS_DEFPTR* 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_U32  Time;
  void    *pCurrentTask;
  void    *p;
  OS_U32  v;
  OS_U8   iRout;
} OS_TRACE_ENTRY;



/*********************************************************************
*
*                      Globals
*
**********************************************************************
*/


/*
    Handle DEFinition (storage is actually allocted) versus DEClaration
    (reference) of RTOS variables depending upon who includes this header file.
*/
#ifdef __OSGLOBAL_C__
  #define OS_EXTERN        /* Declare variables if included by RTOSKERN.C */
#else
  #define OS_EXTERN extern /* Define variables if included by anyone else */
#endif


/*** Start of memory pragma areas ***
 Some compilers can not deal with memory attributes and need pragmas
*/
#if defined(__ghs) && defined(__V850)
  #pragma ghs startzda
#endif

OS_EXTERN OS_SADDR  volatile OS_I32 OS_Time;
OS_EXTERN OS_SADDR  int             OS_TimeDex;
OS_EXTERN OS_SADDR  union { int Dummy; struct { OS_U8 Region, DI; } Cnt; } OS_Counters;

#ifndef WIN32
  #define OS_RegionCnt OS_Counters.Cnt.Region
  #define OS_DICnt     OS_Counters.Cnt.DI
#else
  #define OS_RegionCnt OS_pCurrentTask->RegionCnt
  #define OS_DICnt     OS_pCurrentTask->DICnt
#endif
OS_EXTERN OS_SADDR  OS_U8  OS_IntMSInc;
OS_EXTERN OS_SADDR  OS_U8  OS_TimeSlice;
OS_EXTERN OS_SADDR  OS_U8  OS_TimeSliceAtStart;
OS_EXTERN OS_SADDR  OS_U8  OS_Pending;
OS_EXTERN OS_SADDR  volatile OS_U8  OS_Status;
#if OS_SUPPORT_TICKSTEP
  OS_EXTERN OS_SADDR  volatile OS_U8   OS_TickStep;
  OS_EXTERN OS_SADDR  volatile int     OS_TickStepTime;
#endif
#ifdef __RTOS_ALLOWFRACT__
  OS_EXTERN OS_SADDR        OS_UINT OS_TicksPerMS;
  OS_EXTERN OS_SADDR        int     OS_IntTicksInc;
#endif
#if OS_PROFILE
  OS_EXTERN OS_SADDR OS_U32 OS_TS_ExecStart;
  OS_EXTERN OS_SADDR OS_U8  ProfilingOn;
#endif
#if OS_DEBUG
  OS_EXTERN OS_SADDR int  OS_TaskSwitchFromIntCnt;
  OS_EXTERN OS_SADDR OS_U8 OS_InInt;
  OS_EXTERN OS_SADDR OS_U8 OS_InTimer;
#endif
extern volatile char OS_TxActive;
#define OS_COM_ClearTxActive() OS_TxActive =0

/*** Pointers ***
  Unfortunately there is no real standard on how to define/declare
  pointers properly with extended memory attributes. There are
  currently 2 different standards, which we both support.
*/
#if OS_COMPILER_LOCATION_LEFT
  OS_EXTERN OS_SADDR  OS_TASK OS_DEFPTR  * OS_pTask;                /* linked list of all Tasks */
  OS_EXTERN OS_SADDR  OS_TASK OS_DEFPTR  * OS_pCurrentTask;          /* pointer to current Task */
  OS_EXTERN OS_SADDR  OS_TASK volatile OS_DEFPTR * volatile OS_pActiveTask;
  OS_EXTERN OS_SADDR  OS_TIMER   OS_DEFPTR * OS_pTimer;               /* linked list of all active Timers */
  OS_EXTERN OS_SADDR  OS_RSEMA   OS_DEFPTR * OS_pRSema;
  OS_EXTERN OS_SADDR  OS_MAILBOX OS_DEFPTR * OS_pMB;
  #if OS_DEBUG
    OS_EXTERN OS_SADDR OS_TASK OS_DEFPTR  * OS_pTask2Debug;                /* linked list of all Tasks */
    OS_EXTERN OS_SADDR voidRoutine        * OS_pfOnTask2Debug;
    extern         OS_CSEMA OS_CSEMAPTR* pCSema;
  #endif
#else
  OS_EXTERN OS_TASK    OS_DEFPTR          * OS_SADDR OS_pTask;                /* linked list of all Tasks */
  OS_EXTERN OS_TASK    OS_DEFPTR          * OS_SADDR OS_pCurrentTask;         /* pointer to current Task */
  OS_EXTERN OS_TASK    OS_DEFPTR volatile * OS_SADDR volatile OS_pActiveTask;

⌨️ 快捷键说明

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