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

📄 jacos.h

📁 MicroChip等单片机开发的专业RTOS,源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifdef OS_USE_BSEM_I
  #define OS_Post_BSemI(a)  OS_Post_Bin_I(a)
  #define OS_Post_BSemR(a,c)\
  {\
    OS_Enter_Critical();\
    c = OS_Post_Bin_I(a);\
    OS_Leave_Critical();\
  }
  #define OS_Post_BSem(a)\
  {\
    OS_Enter_Critical();\
    (void)OS_Post_Bin_I(a);\
    OS_Leave_Critical();\
  }
#else
  #define OS_Post_BSemR(a,c) c = OS_Post_Bin_(a)
  #define OS_Post_BSem(a) (void)OS_Post_Bin_(a)
#endif

#ifdef OS_USE_MSG_I
  #define OS_Post_MsgI(a,b) OS_Post_Msg_I(a,b)
  #define OS_Post_MsgR(a,b,c)\
  {\
    OS_Enter_Critical();\
    c = OS_Post_Msg_I(a,b);\
    OS_Leave_Critical();\
  }
  #define OS_Post_Msg(a,b)\
  {\
    OS_Enter_Critical();\
    (void)OS_Post_Msg_I(a,b);\
    OS_Leave_Critical();\
  }
#else
  #define OS_Post_MsgR(a,b,c) c = OS_Post_Msg_(a,b)
  #define OS_Post_Msg(a,b) (void)OS_Post_Msg_(a,b)
#endif

#ifdef OS_USE_FLAGS_I
  #define OS_Set_FlagI(a,b) OS_Post_Flag_I(a,b)
  #define OS_Set_Flag(a,b)\
  {\
    OS_Enter_Critical();\
    OS_Post_Flag_I(a,b);\
    OS_Leave_Critical();\
  }
#else
  #define OS_Set_Flag(a,b)  OS_Post_Flag_(a,b)
#endif

#ifdef OS_USE_CSEM_I
  #define OS_Post_CSemI(a,b)  OS_Post_Cnt_I(a,b)
  #define OS_Post_CSemR(a,b,c)\
  {\
    OS_Enter_Critical();\
    c = OS_Post_Cnt_I(a,b);\
    OS_Leave_Critical();\
  }
  #define OS_Post_CSem(a,b)\
  {\
    OS_Enter_Critical();\
    (void)OS_Post_Cnt_I(a,b);\
    OS_Leave_Critical();\
  }
#else
  #define OS_Post_CSemR(a,b,c) c = OS_Post_Cnt_(a,b)
  #define OS_Post_CSem(a,b) (void)OS_Post_Cnt_(a,b)
#endif

#define OS_Flag_Create(a,b)\
{\
  (a)->event.e_code = (b);\
}

#define OS_Sem_Create(a,b)\
{\
  (a)->event.e_code = (b);\
}

#define OS_Msg_Create(a,b)\
{\
  (a)->event.message = (b);\
}

#define OS_Sem_Reset(a,b)\
{\
  (a)->event.e_code = (b);\
}

#define OS_Cur_Task() (OST_TASK_P)os_cur_task

#define OS_Status() (os_status.state)
#define OS_Ticks()  (os_ticks)

#define OS_Task_Status(a) ((a)->status.state)

#define OS_Task_Resume(a) OS_Task_Resume_((OST_TASK_P)a)

#define OS_Task_Restart(a,b)\
{\
  (b)->entry = (OST_ADDRESS)a;\
}

#define OS_Timer_Queue() ((OST_TASK_P)os_timer_queue)

#define OS_Cur_Delay (os_timer_queue->delay)

#if defined(OS_USE_CSEM) || defined(OS_USE_BSEM)\
|| defined(OS_USE_MSG) || defined(OS_USE_FLAGS)
  #define OS_USE_EVENTS
#endif

#if OS_DELAY_SIZE == 0
  #undef OS_USE_SOFT_DELAY
  #undef OS_USE_DELAY
  #undef OS_USE_DELAY_INTER
  #define OST_TIMER OST_U8
#elif OS_DELAY_SIZE == 1
  #define OS_USE_DELAY
  #define OST_TIMER OST_U8
#elif OS_DELAY_SIZE == 2
  #define OS_USE_DELAY
  #define OST_TIMER OST_U16
#elif OS_DELAY_SIZE == 4
  #define OS_USE_DELAY
  #define OST_TIMER OST_U32
#endif

#ifndef OS_MSG_CVALIF
  #define OS_MSG_CVALIF
#endif

#if   OS_SEM_SIZE == 0
  #undef OS_USE_CSEM
  #undef OS_USE_BSEM
  #define OST_MSG_CODE OST_U8
#elif OS_SEM_SIZE == 1
  #define OST_MSG_CODE OST_U8
#elif OS_SEM_SIZE == 2
  #define OST_MSG_CODE OST_U16
#endif

#ifndef OS_PROTECTION_DISABLE
  #define OS_PROTECTION_DISABLE FALSE
#endif

#ifndef di
  #define di()
#endif

#ifndef ei
  #define ei()
#endif

#if (OS_PROTECTION_DISABLE == FALSE)
  #define OS_Enter_Critical() di()
  #define OS_Leave_Critical() ei()
#else
  #define OS_Enter_Critical()
  #define OS_Leave_Critical()
#endif

#define OS_Is_Idle() (os_cur_task == NULL)

typedef union OST_TASK_STS_ {
  OST_U8 state;
  struct {
    OST_BITS    prio    :4;
    OST_BITS    timer   :1;
    OST_BITS    event   :1;
    OST_BITS    stop    :1;
    OST_BITS    timeout :1;
  } state_parts;
} OST_TASK_STS ;

typedef union OST_STATUS_ {
  OST_U8 state;
  struct {
    OST_BITS    timer      :1;
    OST_BITS    event      :1;
    OST_BITS    idle       :1;
    OST_BITS    task_run   :1;
    OST_BITS    wait_timer :1;
    OST_BITS    wait_event :1;
    OST_BITS    wait_stop  :1;
    OST_BITS    wait_prio  :1;
  } state_parts;
} OST_STATUS;

typedef void OS_MSG_CVALIF *OST_MSG_P;

typedef OS_CVALIF struct os_event OST_EVENT;
typedef OST_EVENT *OST_EVENT_P;
typedef  void (__task *OST_FUNC)(void);
typedef struct OST_TASK_D OS_CVALIF *OST_TASK_P; //

typedef union os_msg_un {
  OST_MSG_P     message;
  OST_MSG_CODE  e_code;
} OST_EVENT_MSG ;

typedef OS_CVALIF struct OST_TASK_D {
  OST_TASK_P    next;

  OST_ADDRESS   entry;

  #ifdef OS_USE_WORKSPACE
  OST_MSG_P     workspace;
  #endif

  #ifdef OS_USE_EXTENSION
  OST_U8        extension;
  #endif

  #if defined(OS_USE_PRIO) || defined(OS_READ_TASK_STATUS)
  OST_TASK_STS  status;
  #endif

  #ifdef OS_USE_TIMEOUT
  OST_TASK_P    queue;
  OST_EVENT_P   event;
  #endif

  #ifdef OS_USE_DELAY
  OST_TIMER     delay;
  #endif
} OST_TASK_T;

typedef OS_CVALIF struct OST_TASK_N {
  OST_TASK_P    next;

  OST_ADDRESS   entry;

  #ifdef OS_USE_WORKSPACE
  OST_MSG_P     workspace;
  #endif

  #ifdef OS_USE_EXTENSION
  OST_U8        extension;
  #endif

  #if defined(OS_USE_PRIO) || defined(OS_READ_TASK_STATUS)
  OST_TASK_STS  status;
  #endif

  #ifdef OS_USE_TIMEOUT
  OST_TASK_P    queue;
  #endif
} OST_TASK;

typedef OS_CVALIF struct os_event {
  OST_TASK_P    queue;

  #ifndef OS_USE_PRIO
  OST_TASK_P    last;
  #endif

  OST_EVENT_MSG event;

} os_event;

//---------------------------------------

OS_EXTERN OS_VAR_LOC OS_CVALIF OST_TASK_P os_cur_task;

#ifdef OST_SP
  OS_EXTERN OST_SP os_sp;
#endif

#ifndef _AVR_REG_
  volatile OS_EXTERN OS_VAR_LOC OS_CVALIF OST_STATUS os_status; //
#else
  __regvar __no_init OST_STATUS os_status @ 15;
#endif

OS_EXTERN OS_VAR_LOC OS_CVALIF OST_TASK_P os_priv_task;
OS_EXTERN OS_VAR_LOC OS_CVALIF OST_TASK_P os_priv_temp;
OS_EXTERN OS_VAR_LOC OS_CVALIF OST_TASK_P os_cur_temp;

#ifdef OS_USE_DELAY
  OS_EXTERN OS_VAR_LOC OS_CVALIF OST_TASK_P os_timer_queue;
  OS_EXTERN OS_VAR_LOC OS_CVALIF OST_U8 os_ticks;
  #ifndef _AVR_REG_
    OS_EXTERN OS_VAR_LOC OS_CVALIF OST_TIMER os_timer_delay;
  #else
    __regvar __no_init OST_TIMER os_timer_delay @ 12;
  #endif
#endif

#if defined(OS_USE_DELAY) || defined(OS_USE_EVENTS) || defined(OS_USE_TASK_STOP)
  OS_EXTERN OS_VAR_LOC OS_CVALIF OST_TASK_P os_task_temp;
#endif

#if defined(OS_USE_DELAY) || defined(OS_USE_EVENTS)
  #if !defined(_AVR_REG_) || (OS_DELAY_SIZE >= 2)
    OS_EXTERN OS_VAR_LOC OS_CVALIF OST_EVENT_P os_event_wait;
  #else
    __regvar __no_init OST_EVENT_P os_event_wait @ 13;
  #endif
#endif

#ifdef OS_USE_PRIO
  #ifdef OS_MAIN
  OS_VAR_LOC OS_CVALIF OST_TASK_P os_prio_tbl[OS_MAX_PRIO+1];
  #else
  OS_EXTERN OS_VAR_LOC OS_CVALIF OST_TASK_P os_prio_tbl[];
  #endif
  #ifndef _AVR_REG_
    OS_EXTERN OS_VAR_LOC OS_CVALIF OST_U8 os_cur_prio;
  #else
    __regvar __no_init OST_U8 os_cur_prio @ 14;
  #endif
#endif

OS_EXTERN OS_VAR_LOC OS_CVALIF OST_TASK_P os_ready_queue;

#ifdef OS_USE_WORKSPACE
  OS_EXTERN  OST_WORKSPACE workspace;
#endif

//---------

extern void OS_Kernel(void);
extern void OS_Task_Init_(OST_ADDRESS);
extern OS_FAST_CALL OST_TASK_P OS_Task_Ins(OST_TASK_P);

extern OS_FAST_CALL OST_TASK_P OS_Ready_Qu(OST_TASK_P);

#ifdef OS_USE_FLAGS
  extern OS_FAST_CALL void OS_Post_Flag_(OST_EVENT_P, OST_MSG_CODE);
  #ifdef OS_OPTI_FLAGS
    extern OS_FAST_CALL OST_ERR_MSG OS_Wait_Flag_(OST_EVENT_P evnt, OST_MSG_CODE mask);
  #endif
  #ifdef OS_USE_FLAGS_I
    extern OS_FAST_CALL void OS_Post_Flag_I(OST_EVENT_P, OST_MSG_CODE);
  #endif
#endif

#ifdef OS_USE_CSEM
  extern OS_FAST_CALL OST_ERR_MSG OS_Post_Cnt_(OST_EVENT_P, OST_MSG_CODE );
  #ifdef OS_USE_CSEM_I
    extern OS_FAST_CALL OST_ERR_MSG OS_Post_Cnt_I(OST_EVENT_P, OST_MSG_CODE );
  #endif
#endif

#ifdef OS_USE_BSEM
  extern OS_FAST_CALL OST_ERR_MSG OS_Post_Bin_(OST_EVENT_P);

  #ifdef OS_USE_BSEM_I
    extern OS_FAST_CALL OST_ERR_MSG OS_Post_Bin_I(OST_EVENT_P);
  #endif
#endif

#if (defined(OS_USE_BSEM) || defined(OS_USE_CSEM))
  #ifdef OS_OPTI_SEM
    extern OS_FAST_CALL OST_ERR_MSG OS_Wait_Sem_(OST_EVENT_P evnt);
  #endif

  #if defined(OS_USE_TIMEOUT) && defined(OS_OPTI_SEMT)
    extern OS_FAST_CALL OST_ERR_MSG OS_Wait_SemT_(OST_EVENT_P evnt, OST_TIMER timer);
  #endif
#endif

#ifdef OS_USE_MSG
  extern OS_FAST_CALL OST_ERR_MSG OS_Post_Msg_(OST_EVENT_P, OST_MSG_P);

  #ifdef OS_OPTI_MSG
    extern OS_FAST_CALL OST_MSG_P OS_Wait_Msg_(OST_EVENT_P evnt);
  #endif

  #if defined(OS_USE_TIMEOUT) && defined(OS_OPTI_MSGT)
    extern OS_FAST_CALL OST_MSG_P OS_Wait_MsgT_(OST_EVENT_P evnt, OST_TIMER timer);
  #endif

  #ifdef OS_USE_MSG_I
    extern OS_FAST_CALL OST_ERR_MSG OS_Post_Msg_I(OST_EVENT_P, OST_MSG_P);
  #endif
#endif

#if defined(OS_USE_TIMEOUT)
  extern OS_FAST_CALL void OS_Wait_TO(OST_EVENT_P evnt,OST_TIMER timer);
  extern OS_FAST_CALL OST_ERR_MSG OS_Is_TO(void);
#endif

#ifdef OS_USE_IDLE_TASK
  extern void OS_Idle(void);
#endif

#ifdef OS_USE_STACK
  extern OS_FAST_CALL void OS_Cooperate_(OS_COOP_PARAMT);
#endif

#ifdef OS_USE_TASK_RESUME
  extern OS_FAST_CALL OST_ERR_MSG OS_Task_Resume_(OST_TASK_P);
#endif

#ifdef OS_USE_RTN_HOOK
  extern void OS_Rtn_Hook(void);
#endif

#ifdef OS_USE_SW_HOOK
  extern void OS_Sw_Hook(void);
#endif

#if defined(OS_PROTECT_STAT) || defined(OS_OPTI_DELAY)
  extern void OS_Delay_Prep_(OST_TIMER delay);
#endif

#endif //_JACOS_H


⌨️ 快捷键说明

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