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