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

📄 os.h

📁 基于16位单片机的符合osek标准的操作系统
💻 H
📖 第 1 页 / 共 2 页
字号:
typedef TickType           *TickRefType;
typedef AlarmBaseType      *AlarmBaseRefType;
typedef OSEK_U8 AppModeType;
typedef OSEK_U8 OSEKOSTaskActCntType;    
extern OSEKOSSaveType                                 OSEKOSrbliste[];         
extern OSEKOSSaveType *                         OSEKOSrbptr;                 
extern TaskType                                 OSEKOStidact;
extern OSEKOSPrioType                                 OSEKOSrunprio;
extern OSEK_U8                                         OSEKOStermregie;
extern volatile OSEKOSPrioType                         OSEKOShighPrio;
extern volatile OSEK_U8                                OSEKOSkernel;
extern TaskStateType                                 OSEKOStaskStatus[];
extern TaskType                                 OSEKOSpliste[];
extern OSEK_TASK ((* OSEK_CONST                 OSEKOStaskStartAddress[])(void)); 
extern OSEK_U8 * OSEK_CONST         OSEKOStaskStack[]; 
extern OSEK_U8 * OSEK_CONST                 OSEKOStaskStackLim[];
extern TaskType OSEK_CONST                         OSEKOStaskRbIndex[]; 
extern OSEKOSPrioType OSEK_CONST                 OSEKOStaskPrio[];   
extern TaskType                                   OSEKOStaskTKette[];   
extern ResourceType                                   OSEKOStaskResCounter[];   
extern OSEKOSPrioType OSEK_CONST                 OSEKOSresPrio[];   
extern OSEKOSPrioType                           OSEKOSresTaskPrio[];     
extern AlarmType                           OSEKOSca_kette[];             
extern TaskType OSEK_CONST                 OSEKOSa_task[];               
extern CounterType OSEK_CONST                 OSEKOSa_counter[];    
extern TickType                           OSEKOSa_startw[];      
extern TickType                           OSEKOSa_zykw[];       
extern TickType                           OSEKOSc_atic[];       
extern TickType OSEK_CONST                 OSEKOSc_maxtick[];   
extern TickType OSEK_CONST                 OSEKOSc_ticksperbase[]; 
extern TickType OSEK_CONST                 OSEKOSc_mincycle[];   
extern AppModeType                         OSEKOSapplicationMode;
extern StatusType                           OSEKOStmpStatus; 
#define OSEKOSEnterHook()
#define OSEKOSLeaveHook()
#define OSEKOSInHook() 0
#define OSEKOSPreTaskHook()
#define OSEKOSPostTaskHook()
extern StatusType OSEKOSError(register StatusType);
extern void StartupHook(void);
#define ERRCHK(x) (x)
extern OSEK_U8 OSEK_CONST OSEKOS_Callschedule[];
#define OSEKOSCallscheduleCheck() ((OSEKOS_Callschedule[OSEKOStidact]==0)?(OSEKOSShutdownOS(E_OS_SYS_CONFIG),0):0)
extern void OSEKOSTaskSwitch(void);
#define __Schedule() ERRCHK\
((OSEKOSCallscheduleCheck(),(OSEKOSinintr!=0)?(E_OS_CALLEVEL):\
((OSEKOShasResource())?(E_OS_RESOURCE):\
((OSEKOSDisable(),OSEKOSReleaseInternalResourceFast(),(OSEKOSneuregie==0))\
?(OSEKOSGetInternalResourceFast(),OSEKOSEnable(),E_OK):\
(OSEKOSTaskSwitch(),OSEKOSGetInternalResourceFast(),OSEKOSEnable(),E_OK)))))
extern StatusType OSEKOSReturn(StatusType);
#define SWTCHK_OK() \
    ((OSEKOSinintr!=0||OSEKOSneuregie==0||(OSEKOStaskStatus[OSEKOStidact]&NPRTASK)!=0)?\
    (OSEKOSEnable(),E_OK):(OSEKOSTaskSwitch(),OSEKOSEnable(),E_OK))
#define SWTCHK(a) \
    (((OSEKOStmpStatus=(a))!=E_OK||OSEKOSinintr!=0||OSEKOSneuregie==0||(OSEKOStaskStatus[OSEKOStidact]&NPRTASK)!=0)?\
     OSEKOSReturn(OSEKOStmpStatus):(OSEKOSTaskSwitch(),OSEKOSEnable(),E_OK))
extern StatusType OSEKOSActivateTask(register TaskType);
#define __ActivateTask(a) ERRCHK\
(((a)>=TMAX)?(E_OS_ID):\
(OSEKOSDisable(),SWTCHK(OSEKOSActivateTask(a))))
extern void OSEKOSTerminateTask(TaskType,TaskType);
extern ResourceType   OSEKOStaskResCounter[];
#define __TerminateTask() ERRCHK\
((OSEKOSinintr!=0)?(E_OS_CALLEVEL):\
((OSEKOShasResource())?(E_OS_RESOURCE):\
(OSEKOSDisable(),OSEKOSReleaseInternalResourceFast(),OSEKOSTerminateTask(OSEKOStidact,TMAX+1),OSEKOSTaskSwitch(),E_OK)))
#define __ChainTask(a) ERRCHK\
((OSEKOSinintr!=0)?(E_OS_CALLEVEL):\
(((a)>=TMAX)?(E_OS_ID):\
(OSEKOShasResource()?(E_OS_RESOURCE):\
((OSEKOStidact!=(a)&&(OSEKOStaskStatus[a]&TSTATBITS)!=SUSPENDED)?(E_OS_LIMIT):\
(OSEKOSDisable(),OSEKOSReleaseInternalResourceFast(),OSEKOSTerminateTask(OSEKOStidact,a),OSEKOSTaskSwitch(),E_OK)))))
#define __GetTaskID(a) \
(*(a)=OSEKOStidact,E_OK)
#define __GetTaskState(a,b) \
(((a)>=TMAX)?(ERRCHK(E_OS_ID)):\
((OSEKOSInHook()||(OSEKOSDisable(),0)),*(b)=(OSEKOStaskStatus[a]&TSTATBITS),(OSEKOSInHook()||(OSEKOSEnable(),0)),E_OK))
#define OSEKOShasResource() (OSEKOStaskResCounter[OSEKOStidact]!=0)
    #define OSEKOSGetInternalResource() 0
    #define OSEKOSGetInternalResourceFast() 0
    #define OSEKOSReleaseInternalResource() 0
    #define OSEKOSReleaseInternalResourceFast() 0
   extern StatusType OSEKOSGetResource(ResourceType);
   extern ResourceType   OSEKOStaskResCounter[];
   #define __GetResource(a) ERRCHK\
   ((OSEKOSinintr!=0)?(E_OS_ACCESS):\
   (((a)>=RMAX)?(E_OS_ID):\
   ((OSEKOSDisable(),OSEKOSReturn(OSEKOSGetResource(a))))))
    extern StatusType OSEKOSReleaseResource(ResourceType);
    extern ResourceType   OSEKOStaskResCounter[];
    #define __ReleaseResource(a) ERRCHK\
    ((OSEKOSinintr!=0)?(E_OS_NOFUNC):\
    (((a)>=RMAX)?(E_OS_ID):\
    (OSEKOSDisable(),SWTCHK(OSEKOSReleaseResource(a)))))
        #define __ClearEvent(a) ERRCHK(E_OS_ACCESS)
        #define __WaitEvent(a)  ERRCHK(E_OS_ACCESS)
        #define __GetEvent(a,b) ERRCHK(E_OS_ACCESS)
        #define __SetEvent(a,b) ERRCHK(E_OS_ACCESS)
#define __GetAlarmBase(a,b) ERRCHK\
    ((a>=AMAX_STD)?(E_OS_ID):\
    (((b)->maxallowedvalue=OSMAXALLOWEDVALUE,\
    (b)->ticksperbase=OSTICKSPERBASE,\
    (b)->mincycle=OSMINCYCLE,E_OK)))
extern TickType OSEKOSGetAlarm(register AlarmType);
#define __GetAlarm(a,b) ERRCHK\
(((a)>=AMAX_STD)?(E_OS_ID):\
((OSEKOSInHook()||(OSEKOSDisable(),0)),((*(b)=OSEKOSGetAlarm(a))==0)?((OSEKOSInHook()||(OSEKOSEnable(),0)),E_OS_NOFUNC):\
((OSEKOSInHook()||(OSEKOSEnable(),0)),E_OK)))
extern void OSEKOSSetAlarm(AlarmType,TickType,TickType);
#define __SetRelAlarm(a,b,c) ERRCHK\
((a)>=AMAX_STD?E_OS_ID:\
(OSEKOSDisable(),(b>OSMAXALLOWEDVALUE||\
c!=0&&\
(c>OSMAXALLOWEDVALUE||c<OSMINCYCLE)))?(OSEKOSEnable(),E_OS_VALUE):\
(OSEKOSca_kette[a]!=(a)?(OSEKOSEnable(),E_OS_STATE):(OSEKOSSetAlarm(a,b,c),OSEKOSEnable(),E_OK)))
extern StatusType OSEKOSSetAbsAlarm(AlarmType a, TickType b, TickType c);
#define __SetAbsAlarm(a,b,c) ERRCHK\
   ((a)>=AMAX_STD?E_OS_ID:\
   ((b>OSMAXALLOWEDVALUE||\
   c!=0&&\
   (c>OSMAXALLOWEDVALUE||c<OSMINCYCLE)))?(E_OS_VALUE):\
   (OSEKOSSetAbsAlarm(a,b,c)))
extern StatusType OSEKOSCancelAlarm(register AlarmType);
#define __CancelAlarm(a) ERRCHK\
(((a)>=AMAX_STD)?E_OS_ID:\
(OSEKOSDisable(),OSEKOSReturn(OSEKOSCancelAlarm(a))))
#define GetCounterValue(a,b) \
(((C_##a)!=0)?ERRCHK(E_OS_ID):\
(OSEKOSDisable(),(*b)=OSEKOSc_atic[0],OSEKOSEnable(),E_OK))
#define AdvanceCounter(a) a##_ACtr()
#define IAdvanceCounter(a) a##_IACtr()
extern void OSEKOSAdvCntr(void);
#define __IAdvCntr(a) \
((OSEKOSc_atic[0]==OSMAXALLOWEDVALUE?OSEKOSc_atic[0]=0:++OSEKOSc_atic[0]),\
OSEKOSDisable(),((OSEKOSca_kette[AMAX_STD]<AMAX_STD&&(--OSEKOSa_startw[OSEKOSca_kette[AMAX_STD]])==0)?\
(OSEKOSAdvCntr(),OSEKOSEnable(),0):(OSEKOSEnable(),0)))
#define __AdvCntr(a) \
((OSEKOSc_atic[0]==OSMAXALLOWEDVALUE?OSEKOSc_atic[0]=0:++OSEKOSc_atic[0]),\
(OSEKOSDisable(),((OSEKOSca_kette[AMAX_STD]<AMAX_STD&&(--OSEKOSa_startw[OSEKOSca_kette[AMAX_STD]])==0)?\
(OSEKOSAdvCntr(),SWTCHK_OK()):(OSEKOSEnable(),E_OK))))
# ifdef INCLUDE_RealOSEKFunctions 
extern AppModeType GetActiveApplicationMode(void);
# else
#define GetActiveApplicationMode() (OSEKOSapplicationMode)
# endif
# ifdef INCLUDE_RealOSEKFunctions 
extern void StartOS(AppModeType);
# else
#define StartOS(a) (OSEKOSapplicationMode = (a),main())
# endif
extern void OSEKOSShutdownOS(StatusType);
#define ShutdownOS(a) OSEKOSShutdownOS(a)
#define TKETTE 1
# ifdef INCLUDE_RealOSEKFunctions 
extern StatusType ActivateTask(TaskType A);
extern StatusType TerminateTask(void);
extern StatusType ChainTask(TaskType A);
extern StatusType GetTaskState(TaskType A,TaskStateRefType B);
extern StatusType GetTaskID(TaskRefType A);
extern StatusType Schedule(void);
extern StatusType GetResource(ResourceType A);
extern StatusType ReleaseResource(ResourceType A);
extern StatusType SetEvent(TaskType A,EventMaskType B);
extern StatusType ClearEvent(EventMaskType A);
extern StatusType WaitEvent(EventMaskType A);
extern StatusType GetEvent(TaskType A,EventMaskRefType B);
extern StatusType GetAlarm(AlarmType A, TickRefType B);
extern StatusType GetAlarmBase(AlarmType A,AlarmBaseRefType B);
extern StatusType SetRelAlarm(AlarmType A,TickType B,TickType C);
extern StatusType SetAbsAlarm(AlarmType A,TickType B,TickType C);
extern StatusType CancelAlarm(AlarmType A);
extern StatusType AdvCntr(CounterType A);
extern StatusType IAdvCntr(CounterType A);
extern void SuspendOSInterrupts(void) ;
extern void ResumeOSInterrupts(void)  ;
extern void SuspendAllInterrupts(void);
extern void ResumeAllInterrupts(void) ;
extern void DisableAllInterrupts(void);
extern void EnableAllInterrupts(void) ;
# endif 
#define OSEKOS_traceTrigger() 0
extern unsigned char  		OSEKOSinintr;
extern unsigned char  		OSEKOSneuregie;
extern unsigned char  		OSEKOSoldCCR;
extern unsigned char  		OSEKOSoldAllCCR;
extern void OSEKOSDisable(void); 
extern void OSEKOSEnable(void);
extern void OSEKOSAsmIDispatch(void);
extern void OSEKOSAsmDispatch(OSEKOSPrioType p);
extern void OSEKOSStartupEnable(void);
#define  OSEKOScheckArchInitialConfiguration() 0 
#define  OSEKOSisrStackCheckFatal(X) 0
# ifdef __HIWARE__
#define 	OSEKOSNop() 	asm NOP
# endif
# ifdef __COSMIC__
#define 	OSEKOSNop() 	_asm("nop\n")
# endif
# ifdef __COSMIC__
#define OSEKOSgetCCR()    _asm("tfr ccr,b\n")
# endif
# ifdef __HIWARE__
# endif 
# ifdef __COSMIC__
extern StatusType OSEKOSReturn(StatusType s);
# endif
# ifdef __HIWARE__
# ifdef __BANKED__
# define PUSH_PPAGE      asm LDAA (HC12_IO_BASE_ADR+OSEKOS_HC12_PPAGE_OFFSET); asm PSHA;
# define POP_PPAGE       asm PULA; asm STAA (HC12_IO_BASE_ADR+OSEKOS_HC12_PPAGE_OFFSET);
# else
# define PUSH_PPAGE
# define POP_PPAGE
# endif 
# endif 
# ifdef __COSMIC__
# ifdef __BANKED__
# define PUSH_PPAGE      _asm("pshb\n",OSEKOS_REG_PPAGE);
# define POP_PPAGE       _asm("tfr d,x \n pula \n staa 0,x\n",&(OSEKOS_REG_PPAGE));
# else
# define PUSH_PPAGE
# define POP_PPAGE
# endif 
# endif 
extern OSEKOSSaveType OSEKOSisrInterruptedTaskStackPointer;
extern const unsigned short *OSEKOSisrStackPointer;
#define OSEKOSIncrementInIntr()		OSEKOSinintr=1
#define OSEKOSDecrementInIntr()		OSEKOSinintr=0
#define OSEKOSSetupIsrStack()      	
#define OSEKOSRestoreTaskStack()      
#define EnableNestedInterrupts()	do{}while(0)
#define DisableNestedInterrupts()	do{}while(0)
# ifdef __HIWARE__
#define OSEKOSEnterISR() \
	do \
	{ \
		PUSH_PPAGE \
		OSEKOSIncrementInIntr(); \
		OSEKOSSetupIsrStack() \
		{ \
		    asm STS OSEKOSisrInterruptedTaskStackPointer; \
		    asm LDS OSEKOSisrStackPointer; \
		} \
	} while(0)
extern void OSEKOSAsmIDispatch(void);
#define OSEKOSLeaveISR() \
	do \
	{ \
                OSEKOSisrStackCheckFatal(OSEKOSgetStackPointer());\
		asm SEI; \
		OSEKOSDecrementInIntr(); \
		OSEKOSRestoreTaskStack() \
		{ \
		    if(OSEKOSneuregie!=0) \
		        OSEKOSAsmIDispatch(); \
		    asm LDS OSEKOSisrInterruptedTaskStackPointer; \
		} \
		POP_PPAGE \
		asm RTI;\
	} while(0)
# endif 
# ifdef __COSMIC__
#define OSEKOSEnterISR() \
        do \
        { \
                PUSH_PPAGE \
                OSEKOSIncrementInIntr(); \
		OSEKOSSetupIsrStack() \
		{ \
                    _asm(" xref _OSEKOSisrInterruptedTaskStackPointer\n"); \
                    _asm(" xref _OSEKOSisrStackPointer\n"); \
                    _asm("sts _OSEKOSisrInterruptedTaskStackPointer\n"); \
                    _asm("lds _OSEKOSisrStackPointer\n"); \
		} \
        } while(0)
extern void OSEKOSAsmIDispatch(void);
#define OSEKOSLeaveISR() \
        do \
        { \
                OSEKOSisrStackCheckFatal(OSEKOSgetStackPointer());\
		_asm("sei\n"); \
		OSEKOSDecrementInIntr(); \
		OSEKOSRestoreTaskStack() \
		{ \
                    if(OSEKOSneuregie!=0) \
                        OSEKOSAsmIDispatch(); \
                    _asm(" xref _OSEKOSisrInterruptedTaskStackPointer\n"); \
                    _asm("lds _OSEKOSisrInterruptedTaskStackPointer\n"); \
		} \
                POP_PPAGE \
                _asm("rti\n"); \
        } while(0)
# endif 
# ifdef __HIWARE__
# pragma INLINE
static void OSEKOSDisableAllInterrupts()
{
    asm TFR	CCR,B;
    asm SEI;
    asm STAB	OSEKOSoldCCR;
}
# pragma INLINE
static void OSEKOSEnableAllInterrupts()
{
    asm LDAB	OSEKOSoldCCR;
    asm TFR	B,CCR;
}
# endif 
# ifdef __COSMIC__
# ifdef __COSMIC__
#define OSEKOSDisableAllInterrupts() _asm("pshb\n xref _OSEKOSoldCCR\n tfr ccr,b\n sei\n stab _OSEKOSoldCCR\n pulb\n")
#define OSEKOSEnableAllInterrupts()  _asm("pshb\n xref _OSEKOSoldCCR\n ldab _OSEKOSoldCCR\n tfr b,ccr\n pulb\n")
# endif 
# endif 
#define OSEKOSSuspendAllInterrupts() OSEKOSSuspendOSInterrupts()
#define OSEKOSResumeAllInterrupts()  OSEKOSResumeOSInterrupts()
extern void OSEKOSSuspendOSInterrupts(void);
extern void OSEKOSResumeOSInterrupts(void);
extern void OSEKOScheckSuspendResumeNesting(void);
# ifdef __HIWARE__
extern unsigned char OSEKOSgetCCR(void);
# endif
# if (defined(__HIWARE__))
# if (defined(__BANKED__))
# pragma CODE_SEG DEFAULT
# pragma CONST_SEG DEFAULT
# endif
# endif
#endif
/* 9b978ca6568ce0a28ab2900733a6a585  */

⌨️ 快捷键说明

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