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

📄 prt_p16.h

📁 MicroChip等单片机开发的专业RTOS,源代码
💻 H
字号:
#ifndef _JA_PRT_H
#define _JA_PRT_H

#define __task

#define OS_MSG_FAR const
#define OS_MSG_NEAR near

#if (OS_MEM_MODEL & SMALL)
  #define OST_ADDRESS void near *
#endif

#if (OS_MEM_MODEL & COMPACT)
  #define OS_USE_STACK
  #define OS_COOP_PARAMT OST_ADDRESS adr
  asm("fncall _OS_Kernel,_OS_Cooperate_");
#else
  #ifdef OS_Lib_Type
    asm("global _OS_Cooperate_");
  #endif
#endif

#define OS_KERNTMP kern_temp.prio = 0

#if (OS_SCHED_LOCKED == TRUE)
  #define OS_RTN_LABEL()\
  {\
    OS_KERNTMP;\
    asm("global _OS_Return");\
    asm("_OS_Return:");\
  }
  #define OS_RET \
    asm("global _OS_Return");\
    asm("ljmp   _OS_Return")
#else
  #define OS_RET \
    asm("return")
#endif

#if (OS_MEM_MODEL == (COMPACT + SMALL))
  #define OS_PICVER\
    asm("save_address macro");\
    asm("local  label,label_out");\
    asm("global _OS_Cooperate_");\
    asm("global label");\
    asm("movlw  low label_out");\
    asm("ljmp   _OS_Cooperate_");\
    asm("label:");\
    asm("psect  strings");\
    asm("label_out: ljmp label");\
    asm("endm");
  #define OS_Cooperate_Code()\
  {\
    asm("global ?_OS_Cooperate_");\
    asm("movwf  ?_OS_Cooperate_");\
    asm("global _os_cur_task");\
    asm("incf   low _os_cur_task,w");\
    asm("movwf  fsr");\
    asm("movf   ?_OS_Cooperate_,w");\
    asm("movwf  indf");\
    OS_RET;\
  }
#elif (OS_MEM_MODEL == COMPACT)
  #define OS_PICVER\
    asm("save_address macro");\
    asm("local  label");\
    asm("global ?_OS_Cooperate_");\
    asm("global _OS_Cooperate_");\
    asm("movlw  high label");\
    asm("movwf  ?_OS_Cooperate_ + 1");\
    asm("movlw  low label");\
    asm("ljmp   _OS_Cooperate_");\
    asm("label:");\
    asm("endm");
  #define OS_Cooperate_Code()\
  {\
    asm("global ?_OS_Cooperate_");\
    asm("movwf  ?_OS_Cooperate_");\
    asm("global _os_cur_task");\
    asm("incf   low _os_cur_task,w");\
    asm("movwf  fsr");\
    asm("movf   ?_OS_Cooperate_,w");\
    asm("movwf  indf");\
    asm("incf   fsr");\
    asm("movf   ?_OS_Cooperate_ + 1,w");\
    asm("movwf  indf");\
    OS_RET;\
  }
#elif (OS_MEM_MODEL == SMALL)
  #define OS_PICVER\
    asm("save_address macro");\
    asm("local  label,label_out");\
    asm("global _os_cur_task");\
    asm("incf   low _os_cur_task,w");\
    asm("movwf  fsr");\
    asm("movlw  low label_out");\
    asm("movwf  indf");\
    OS_RET;\
    asm("label:");\
    asm("psect strings ");\
    asm("label_out: ljmp label");\
    asm("endm");
#elif (OS_MEM_MODEL == NORMAL)
  #define OS_PICVER\
    asm("save_address macro");\
    asm("local  label");\
    asm("global _os_cur_task");\
    asm("incf   low _os_cur_task,w");\
    asm("movwf  fsr");\
    asm("movlw  low label");\
    asm("movwf  indf");\
    asm("incf   fsr");\
    asm("movlw  high label");\
    asm("movwf  indf");\
    OS_RET;\
    asm("label:");\
    asm("endm");
#endif

#define OS_Cooperate()\
{\
  os_status.state_parts.task_run = FALSE;\
  asm("save_address");\
}

#define OS_Tree_Rest(a)\
{\
  asm("fncall _OS_Kernel,_" #a);\
}

#if (OS_MEM_MODEL & SMALL)
  #define OS_Task_Switch()\
  {\
    asm("global string_table");\
    asm("clrf pclath");\
    asm("incf low _os_cur_task,w");\
    asm("movwf fsr");\
    asm("movf indf,w");\
    asm("movwf pcl");\
  }
#else
  #define OS_Task_Switch()\
  {\
    asm("incf low _os_cur_task,w");\
    asm("movwf fsr");\
    asm("incf fsr");\
    asm("movf indf,w");\
    asm("movwf pclath");\
    asm("decf fsr");\
    asm("movf indf,w");\
    asm("movwf pcl");\
  }
#endif
//    OS_BANK_0;\

#ifndef OS_Is_Timer
  #define OS_Is_Timer() T0IF
#endif

#ifndef OS_Timer_Tick_Set
  #define OS_Timer_Tick_Set()\
  {\
    TMR0 -= OS_TMR_TICK;\
    T0IF = 0;\
  }
#endif

#endif // _JA_PRT_H

⌨️ 快捷键说明

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