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

📄 jacos.h

📁 MicroChip等单片机开发的专业RTOS,源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
#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 + -