📄 jacos.h
字号:
#ifndef _JACOS_H
#define _JACOS_H
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#ifndef NULL
#define NULL (void *)0
#endif
#define SMALL 2
#define NORMAL 1
#define COMPACT 4
#include <ja_libr.h>
#if defined(_PIC14) || defined(_PIC12)
#define _PIC_
#include <pic.h>
#if defined _PIC14
#include <prt_p16.h>
#else
#include <prt_p12.h>
#endif
#elif defined _PIC18
#define _PIC_
#include <pic18.h>
#include <prt_p18.h>
#elif defined __18CXX
#define _PIC18
#include <p18cxxx.h>
#include <prt_mcc.h>
#elif defined __ICCPIC18__
#define _PIC18I TRUE
#include <prt_i18.h>
#elif defined __ICCAVR__
#define _AVR_
#include <prt_avr.h>
#elif defined __GNUC__
#define _GAVR_
#include <avr/io.h>
#include <prt_gavr.h>
#elif defined __ICC430__
#define _MSP __ICC430__
#include <prt_i430.h>
#elif defined __CODEVISIONAVR__
#define _CVAVR_
#include <prt_cva.h>
#elif defined __CX51__ || defined __C51__
#define _51_
#include <prt_kc51.h>
#elif defined __ICCARM__
#define _ARM_
#include <prt_arm.h>
#elif defined __STDC__
#define _ARM_
//#define OST_BITS unsigned
#include <prt_std.h>
#endif
#define OSS_READY_Q 0x00
#define OSS_TIMER 0x01
#define OSS_EVENT 0x02
#define OSS_IDLE 0x04
#define OSS_TASK_RUN 0x08
#define OSS_TIMER_Q 0x10
#define OSS_EVENT_Q 0x20
#define OSS_STOPPED 0x40
#define OSS_TIMEOUT 0x80
#define OS_STS_WAIT_MASK 0xF0
#define OS_STS_PRIO_MASK 0x0F
#define OS_ERROR 0x1
#define OS_NOERR 0x0
#ifdef OS_MAIN
#define OS_EXTERN
#else
#define OS_EXTERN extern
#endif
#ifndef OS_CVALIF
#define OS_CVALIF
#endif
#ifndef OS_FAST_CALL
#define OS_FAST_CALL
#endif
#ifndef OS_VAR_LOC
#define OS_VAR_LOC
#endif
#define OST_U8 unsigned char
#define OST_S8 signed char
#ifndef OST_U16
#define OST_U16 unsigned short
#endif
#ifndef OST_S16
#define OST_S16 signed short
#endif
#define OST_U32 unsigned long
#define OST_S32 signed long
#define OST_ERR_MSG OST_U8
#ifndef OST_BITS
#define OST_BITS OST_U8
#endif
#ifndef OS_SIZE_OPTIM
#define OS_SIZE_OPTIM 0
#endif
#ifndef OS_Scheduler
#define OS_Scheduler()\
{\
OS_Kernel();\
}
#endif
#define OS_Delay(a)\
{\
OS_Delay_Prep(a);\
OS_Cooperate();\
}
#if defined(OS_OPTI_DELAY) || defined(OS_PROTECT_STAT)
#define OS_Delay_Prep(a) OS_Delay_Prep_(a)
#else
#define OS_Delay_Prep(a)\
OS_Enter_Critical();\
os_timer_delay = a;\
os_status.state_parts.wait_timer = TRUE
#endif
#ifndef OS_Timer
#define OS_Timer()\
{\
if (os_timer_queue != NULL) { os_ticks++;}\
}
#endif
#ifdef OS_USE_TASK_RESUME
#undef OS_USE_TASK_STOP
#define OS_USE_TASK_STOP
#undef OS_READ_TASK_STATUS
#define OS_READ_TASK_STATUS
#endif
#ifndef OST_WORKSPACE
#undef OS_USE_WORKSPACE
#else
#define OS_USE_WORKSPACE
#endif
#ifndef OST_ADDRESS
#define OST_ADDRESS OST_FUNC
#endif
#ifndef OS_Cooperate
#define OS_Cooperate()\
{\
OS_Cooperate_();\
}
#endif
#ifndef OS_SP_Save
#define OS_SP_Save()
#endif
#ifndef OS_Task_Switch
#define OS_Task_Switch()\
{\
OS_SP_Save();\
((void (*)(void))(os_cur_task->entry))();\
}
#endif
#ifndef OS_Tree_Rest
#define OS_Tree_Rest(a)
#endif
#ifndef OS_RTN_LABEL
#define OS_RTN_LABEL()
#endif
#if !defined(OS_USE_PRIO) && (OS_MAX_PRIO >= 1)
#define OS_USE_PRIO
#endif
#ifdef OS_USE_PRIO
#define OS_Init()\
{\
os_cur_prio = 0;\
os_status.state_parts.idle = TRUE;\
}
#else
#define OS_Init()\
{\
os_status.state_parts.idle = TRUE;\
}
#endif
#if defined(OS_USE_PRIO) && defined(OST_WORKSPACE)
#define OS_Task_Create(a,b,c,d)\
{\
OS_Tree_Rest(a);\
os_priv_temp = (OST_TASK_P)(b);\
os_priv_temp->status.state = c;\
os_priv_temp->workspace = d;\
OS_Task_Init_(a);\
}
#elif defined(OS_USE_PRIO)
#define OS_Task_Create(a,b,c)\
{\
OS_Tree_Rest(a);\
os_priv_temp = (OST_TASK_P)(b);\
os_priv_temp->status.state = c;\
OS_Task_Init_(a);\
}
#elif defined(OST_WORKSPACE)
#define OS_Task_Create(a,b,c)\
{\
OS_Tree_Rest(a);\
os_priv_temp = (OST_TASK_P)(b);\
os_priv_temp->workspace = c;\
OS_Task_Init_(a);\
}
#else
#define OS_Task_Create(a,b)\
{\
OS_Tree_Rest(a);\
os_priv_temp = (OST_TASK_P)(b);\
OS_Task_Init_(a);\
}
#endif
#define OS_Task_Stop()\
{\
OS_Enter_Critical();\
os_status.state_parts.wait_stop = TRUE;\
OS_Leave_Critical();\
OS_Cooperate();\
}
#ifdef OS_OPTI_FLAGS
#define OS_Wait_Flag(a,b)\
{\
while ( OS_Wait_Flag_(a,b) ) {\
OS_Cooperate();\
}\
}
#else
#define OS_Wait_Flag(a,b)\
{\
do {\
OS_Enter_Critical();\
if ( ((a)->event.e_code & b) == b ) break;\
os_event_wait = (a);\
os_status.state_parts.wait_event = TRUE;\
OS_Cooperate();\
} while(1);\
OS_Leave_Critical();\
}
#endif
#ifdef OS_OPTI_SEM
#define OS_Wait_Sem(a)\
{\
while ( OS_Wait_Sem_(a) ) {\
OS_Cooperate();\
}\
}
#else
#define OS_Wait_Sem(a)\
{\
do {\
OS_Enter_Critical();\
if ( (a)->event.e_code != 0 ) break;\
os_event_wait = (a);\
os_status.state_parts.wait_event = TRUE;\
OS_Cooperate();\
} while(1);\
(a)->event.e_code--;\
OS_Leave_Critical();\
}
#endif
#ifdef OS_OPTI_SEMT
#define OS_Wait_SemT(a,b)\
{\
while ( OS_Wait_SemT_(a,b) ) {\
OS_Cooperate();\
if (OS_Is_TO()) break;\
}\
}
#else
#define OS_Wait_SemT(a,b)\
{\
do {\
OS_Enter_Critical();\
if ( (a)->event.e_code != 0 ) {\
(a)->event.e_code--;\
break;\
}\
OS_Wait_TO(a,b);\
OS_Cooperate();\
} while(! OS_Is_TO());\
OS_Leave_Critical();\
}
#endif
#ifdef OS_OPTI_MSG
#define OS_Wait_Msg(a,b)\
{\
while ( (b = OS_Wait_Msg_(a)) == NULL ) {\
OS_Cooperate();\
}\
}
#else
#define OS_Wait_Msg(a,b)\
{\
do {\
OS_Enter_Critical();\
if ( ((b) = (a)->event.message) != NULL ) {\
(a)->event.message = NULL;\
OS_Leave_Critical();\
break;\
}\
os_event_wait = (a);\
os_status.state_parts.wait_event = TRUE;\
OS_Cooperate();\
} while(1);\
}
#endif
#ifdef OS_OPTI_MSGT
#define OS_Wait_MsgT(a,b,c)\
{\
while ( (b = OS_Wait_MsgT_(a,c)) == NULL ) {\
OS_Cooperate();\
if (OS_Is_TO()) break;\
}\
}
#else
#define OS_Wait_MsgT(a,b,c)\
{\
do {\
OS_Enter_Critical();\
if ((a)->event.message != NULL) {\
(b) = (a)->event.message;\
(a)->event.message = NULL;\
break;\
}\
OS_Wait_TO(a,c);\
OS_Cooperate();\
} while( ! OS_Is_TO() );\
OS_Leave_Critical();\
}
#endif
#define OS_Accept_Sem(a)\
{\
OS_Enter_Critical();\
if ((a)->event.e_code != 0) {\
(a)->event.e_code--;\
}\
OS_Leave_Critical();\
}
#define OS_Accept_SemI(a)\
{\
if ((a)->event.e_code != 0) {\
(a)->event.e_code--;\
}\
}
#define OS_Read_Sem(a) ((a)->event.e_code)
#define OS_Accept_Msg(a,b)\
{\
OS_Enter_Critical();\
(b) = (a)->event.message;\
(a)->event.message = NULL;\
OS_Leave_Critical();\
}
#define OS_Accept_MsgI(a,b)\
{\
(b) = (a)->event.message;\
(a)->event.message = NULL;\
}
#define OS_Read_Msg(a) ((a)->event.message)
#define OS_Clear_Flag(a,b)\
{\
OS_Enter_Critical();\
(a)->event.e_code &= ~b;\
OS_Leave_Critical();\
}
#define OS_Clear_FlagI(a,b)\
{\
(a)->event.e_code &= ~b;\
}
#define OS_Read_Flag(a) ((a)->event.e_code)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -