📄 jacos.h
字号:
#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 + -