📄 rtos.h
字号:
#endif
OS_EXTERN OS_SADDR OS_UINT OS_TicksPerMS;
OS_EXTERN OS_SADDR int OS_IntTicksInc;
#if OS_PROFILE
OS_EXTERN OS_SADDR OS_U32 OS_TS_ExecStart;
OS_EXTERN OS_SADDR OS_U8 ProfilingOn;
#endif
#if OS_DEBUG
OS_EXTERN OS_SADDR OS_U8 OS_InInt;
OS_EXTERN OS_SADDR OS_U8 OS_InTimer;
OS_EXTERN OS_SADDR OS_U8 OS_InitCalled;
#endif
#if OS_SUPPORT_POWER
OS_EXTERN OS_SADDR OS_U8 OS_POWER_Levels[OS_POWER_NUM_COUNTERS];
#endif
/*** Pointers ***
Unfortunately there is no real standard on how to define/declare
pointers properly with extended memory attributes. There are
currently 2 different standards, which we both support.
*/
#if OS_COMPILER_LOCATION_LEFT
OS_EXTERN OS_SADDR OS_TASK * OS_pTask; /* linked list of all Tasks */
OS_EXTERN OS_SADDR OS_TASK * OS_pCurrentTask; /* pointer to current Task */
OS_EXTERN OS_SADDR OS_TASK volatile * volatile OS_pActiveTask;
OS_EXTERN OS_SADDR OS_TIMER * OS_pTimer; /* linked list of all active Timers */
OS_EXTERN OS_SADDR OS_TIMER * OS_pCurrentTimer; /* Actual expired timer which called callback */
OS_EXTERN OS_SADDR OS_RSEMA * OS_pRSema;
#if OS_LINK_MAILBOXES
OS_EXTERN OS_SADDR OS_MAILBOX * OS_pMailbox;
#endif
#if OS_DEBUG
OS_EXTERN OS_SADDR OS_CSEMA * OS_pCSema;
#endif
OS_EXTERN OS_SADDR OS_MEMF * OS_pMEMF; /* linked list of all fixed size memory pools */
OS_EXTERN OS_SADDR OS_TICK_HOOK * OS_pTickHook; /* linked list of all tick hook functions */
#else
OS_EXTERN OS_TASK * OS_SADDR OS_pTask; /* linked list of all Tasks */
OS_EXTERN OS_TASK * OS_SADDR OS_pCurrentTask; /* pointer to current Task */
OS_EXTERN OS_TASK volatile * OS_SADDR volatile OS_pActiveTask;
OS_EXTERN OS_TIMER * OS_SADDR OS_pTimer; /* linked list of all active Timers */
OS_EXTERN OS_TIMER * OS_SADDR OS_pCurrentTimer; /* Actual expired timer which called callback */
OS_EXTERN OS_RSEMA * OS_SADDR OS_pRSema;
#if OS_LINK_MAILBOXES
OS_EXTERN OS_MAILBOX * OS_SADDR OS_pMailbox;
#endif
#if OS_DEBUG
OS_EXTERN OS_CSEMA * OS_SADDR OS_pCSema;
#endif
OS_EXTERN OS_MEMF * OS_SADDR OS_pMEMF; /* linked list of all fixed size memory pools */
OS_EXTERN OS_TICK_HOOK * OS_SADDR OS_pTickHook; /* linked list of all tick hook functions */
#endif
#else /* OS_COMPILER_STORAGE_MODIFIER_LEFT == 0, needed for Keil 166 */
OS_EXTERN volatile OS_I32 OS_SADDR OS_Time;
OS_EXTERN OS_TIME OS_SADDR OS_EXTERN_INIT(OS_TimeDex, 16384);
OS_EXTERN OS_COUNTERS OS_SADDR OS_Counters;
OS_EXTERN OS_U8 OS_SADDR OS_EXTERN_INIT(OS_IntMSInc, 1);
OS_EXTERN OS_U8 OS_SADDR OS_Pending;
OS_EXTERN volatile OS_U8 OS_SADDR OS_Status;
#if OS_RR_SUPPORTED
OS_EXTERN OS_U8 OS_SADDR OS_TimeSlice;
OS_EXTERN OS_U8 OS_SADDR OS_TimeSliceAtStart;
#endif
#if OS_SUPPORT_TICKSTEP
OS_EXTERN volatile OS_U8 OS_SADDR OS_TickStep;
OS_EXTERN volatile int OS_SADDR OS_TickStepTime;
#endif
OS_EXTERN OS_UINT OS_SADDR OS_TicksPerMS;
OS_EXTERN int OS_SADDR OS_IntTicksInc;
#if OS_PROFILE
OS_EXTERN OS_U32 OS_SADDR OS_TS_ExecStart;
OS_EXTERN OS_U8 OS_SADDR ProfilingOn;
#endif
#if OS_DEBUG
OS_EXTERN OS_U8 OS_SADDR OS_InInt;
OS_EXTERN OS_U8 OS_SADDR OS_InTimer;
OS_EXTERN OS_U8 OS_SADDR OS_InitCalled;
#endif
#if OS_SUPPORT_POWER
OS_EXTERN OS_U8 OS_SADDR OS_POWER_Levels[OS_POWER_NUM_COUNTERS];
#endif
/*** Pointers ***
Unfortunately there is no real standard on how to define/declare
pointers properly with extended memory attributes. There are
currently 2 different standards, which we both support.
*/
#if OS_COMPILER_LOCATION_LEFT
OS_EXTERN OS_SADDR OS_TASK * OS_pTask; /* linked list of all Tasks */
OS_EXTERN OS_SADDR OS_TASK * OS_pCurrentTask; /* pointer to current Task */
OS_EXTERN OS_SADDR OS_TASK volatile * volatile OS_pActiveTask;
OS_EXTERN OS_SADDR OS_TIMER * OS_pTimer; /* linked list of all active Timers */
OS_EXTERN OS_SADDR OS_TIMER * OS_pCurrentTimer; /* Actual expired timer which called callback */
OS_EXTERN OS_SADDR OS_RSEMA * OS_pRSema;
#if OS_LINK_MAILBOXES
OS_EXTERN OS_SADDR OS_MAILBOX * OS_pMailbox;
#endif
#if OS_DEBUG
OS_EXTERN OS_SADDR OS_CSEMA * OS_pCSema;
#endif
OS_EXTERN OS_SADDR OS_MEMF * OS_pMEMF; /* linked list of all fixed size memory pools */
OS_EXTERN OS_SADDR OS_TICK_HOOK * OS_pTickHook; /* linked list of all tick hook functions */
#else
OS_EXTERN OS_TASK * OS_SADDR OS_pTask; /* linked list of all Tasks */
OS_EXTERN OS_TASK * OS_SADDR OS_pCurrentTask; /* pointer to current Task */
OS_EXTERN OS_TASK volatile * volatile OS_SADDR OS_pActiveTask;
OS_EXTERN OS_TIMER * OS_SADDR OS_pTimer; /* linked list of all active Timers */
OS_EXTERN OS_TIMER * OS_SADDR OS_pCurrentTimer; /* Actual expired timer which called callback */
OS_EXTERN OS_RSEMA * OS_SADDR OS_pRSema;
#if OS_LINK_MAILBOXES
OS_EXTERN OS_MAILBOX * OS_SADDR OS_pMailbox;
#endif
#if OS_DEBUG
OS_EXTERN OS_CSEMA * OS_SADDR OS_pCSema;
#endif
OS_EXTERN OS_MEMF * OS_SADDR OS_pMEMF; /* linked list of all fixed size memory pools */
OS_EXTERN OS_TICK_HOOK * OS_SADDR OS_pTickHook; /* linked list of all tick hook functions */
#endif
#endif /* OS_COMPILER_STORAGE_MODIFIER_LEFT */
/***** Mark end of memory pragma area *******************************/
#if defined(__ghs_zda)
#pragma ghs endzda
#endif
/********************************************************************/
#define OS_RegionCnt OS_Counters.Cnt.Region
#define OS_DICnt OS_Counters.Cnt.DI
/*********************************************************************
*
* OS_CREATETASK macro
* OS_CREATETASK_EX macro
*/
#if OS_RR_SUPPORTED
#define CTPARA_TIMESLICE ,2
#else
#define CTPARA_TIMESLICE
#endif
#if OS_TRACKNAME
#define OS_CREATETASK(pTask, Name, Hook, Priority, pStack) \
OS_CreateTask (pTask, \
Name, \
Priority, \
Hook, \
(void OS_STACKPTR*)pStack, \
sizeof(pStack) \
CTPARA_TIMESLICE \
)
#else
#define OS_CREATETASK(pTask, Name, Hook, Priority, pStack) \
OS_CreateTask (pTask, \
Priority, \
Hook, \
(void OS_STACKPTR*)pStack, \
sizeof(pStack) \
CTPARA_TIMESLICE \
)
#endif
#if OS_TRACKNAME
#define OS_CREATETASK_EX(pTask, Name, Hook, Priority, pStack, pContext) \
OS_CreateTaskEx (pTask, \
Name, \
Priority, \
Hook, \
(void OS_STACKPTR*)pStack, \
sizeof(pStack) \
CTPARA_TIMESLICE, \
pContext \
)
#else
#define OS_CREATETASK_EX(pTask, Name, Hook, Priority, pStack, pContext) \
OS_CreateTaskEx (pTask, \
Priority, \
Hook, \
(void OS_STACKPTR*)pStack, \
sizeof(pStack) \
CTPARA_TIMESLICE, \
pContext \
)
#endif
/*********************************************************************
*
* OS_CreateTask
* OS_CreateTaskEx
*/
#if OS_TRACKNAME
#define OS_CREATE_TASK_PARA_NAME const char*Name,
#else
#define OS_CREATE_TASK_PARA_NAME
#endif
#if OS_RR_SUPPORTED
#define OS_CREATE_TASK_PARA_TS ,OS_UINT TimeSlice
#else
#define OS_CREATE_TASK_PARA_TS
#endif
void OS_CreateTask ( OS_TASK * pTask,
OS_CREATE_TASK_PARA_NAME
OS_U8 Priority,
void (*pRoutine)(void),
void OS_STACKPTR *pStack,
OS_UINT StackSize
OS_CREATE_TASK_PARA_TS
);
void OS_CreateTaskEx ( OS_TASK * pTask,
OS_CREATE_TASK_PARA_NAME
OS_U8 Priority,
void (*pRoutine)(void *),
void OS_STACKPTR *pStack,
OS_UINT StackSize
OS_CREATE_TASK_PARA_TS,
void * pContext
);
#if OS_SUPPORT_SAVE_RESTORE_HOOK
void OS_ExtendTaskContext(const OS_EXTEND_TASK_CONTEXT * pExtendContext);
#endif
/*********************************************************************
*
* Task related routines
*
**********************************************************************
*/
void OS_Delay(OS_TIME ms); /* OSKern.c */
void OS_DelayUntil(OS_TIME t); /* OSKern.c */
OS_U8 OS_GetSuspendCnt (OS_TASK* pTask); /* OS_GetSuspendCnt.c */
void OS_GetState (OS_TASK* pTask);
char OS_IsTask (OS_TASK* pTask); /* OSIsTask.c */
void OS_Resume (OS_TASK* pTask); /* OS_Suspend.c */
void OS_SetTaskName (OS_TASK * pTask, const char* s);
void OS_SetPriority (OS_TASK* pTask, OS_U8 Prio); /* OSSetP.c */
void OS_Suspend (OS_TASK* pTask); /* OS_Suspend.c */
void OS_Terminate (OS_TASK* pTask); /* OSTerm.c */
void OS_TerminateError (void); /* OSTermE.c */
void OS_WakeTask (OS_TASK* pTask); /* OSWake.c */
void OS_Yield (void); /* OS_Yield */
#if OS_SUSPEND_TASK_ON_TERMINATE /* Set task state of a terminated task to "suspended" */
#define OS_SUSPEND_TERMINATED_TASK(pTask) (pTask->Stat = 0x01)
#else
#define OS_SUSPEND_TERMINATED_TASK(pTask)
#endif
/*********************************************************************
*
* Info routines (OSInfo.c)
*
**********************************************************************
*/
const char* OS_GetCPU(void);
const char* OS_GetLibMode(void);
const char* OS_GetModel(void);
const char* OS_GetLibName(void);
OS_UINT OS_GetVersion(void);
#define OS_GetType() OS_GetLibMode()
#define OS_TASKID OS_TASK *
#define OS_GetTaskID() OS_pCurrentTask
#define OS_GetpCurrentTask() OS_pCurrentTask
#define OS_GetpCurrentTimer() OS_pCurrentTimer
#define OS_GetpCurrentTimerEx() ((OS_TIMER_EX*)OS_pCurrentTimer)
#if OS_TRACKNAME
const char* OS_GetTaskName(OS_TASK *);
#else
#define OS_GetTaskName(pt) ("n/a")
#endif
#if OS_CHECKSTACK
void OS_CheckStack(void); /* internal usage */
int OS_GetStackSpace(OS_TASK * pTask);
int OS_GetStackUsed (OS_TASK * pTask);
int OS_GetStackSize (OS_TASK OS_TCBPTR * pTask);
void OS_STACKPTR* OS_GetStackBase(OS_TASK OS_TCBPTR *pTask);
#else
#define OS_CheckStack()
#define OS_GetStackSpace(pt) 0
#define OS_GetStackUsed(pt) 0
#define OS_GetStackSize(pt) 0
#define OS_GetStackBase(pt) 0
#endif
OS_STACK_ADR OS_GetSysStackBase(void); /* RTOS asm part */
unsigned int OS_GetSysStackSize(void); /* RTOS asm part */
OS_STACK_ADR OS_GetIntStackBase(void); /* RTOS asm part */
unsigned int OS_GetIntStackSize(void); /* RTOS asm part */
#if OS_RR_SUPPORTED
OS_U8 OS_SetTimeSlice(OS_TASK * pTask, OS_U8 TimeSlice);
OS_U8 OS_GetTimeSliceRem(OS_TASK OS_TCBPTR * pTask);
#define OS_GetTimeSliceReload(pTask) pTask->TimeSliceReload
#else
#define OS_GetTimeSliceRem(pTask) 0
#define OS_GetTimeSliceReload(pTask) 0
#endif
OS_U8 OS_GetPriority(OS_TASK * pTask); /* OS_GetPrio.c */
#define OS_GET_PRIORITY(pt) pt->Priority
int OS_GetNumTasks(void); /* OS_GetNumTasks.c */
OS_TASK* OS_TaskIndex2Ptr(int TaskIndex); /* OS_TaskIndex2Ptr.c */
#if OS_PROFILE >=1
OS_U32 OS_STAT_GetExecTime_Cycles (OS_TASK *pTask); /* OSStat.c */
int OS_STAT_GetLoad (OS_TASK *pTask); /* OSStatGL.c */
void OS_STAT_NotifyReadyStart (OS_TASK *pTask); /* OSStat.c */
void OS_STAT_Sample(void); /* OSStat.c */
#else
#define OS_STAT_NotifyExecEnd()
#define OS_STAT_GetExecTime_Cycles(pTask) 0
#define OS_STAT_GetLoad(pTask) 0
#define OS_STAT_Sample()
#define OS_STAT_SetClocksPerUnit(ClocksPerUnit)
#define OS_STAT_NOTIFYREADYSTART(pTask)
#endif
#if ((OS_PROFILE >= 1) || (OS_DEBUG > 0)) /* Also available in Debug build since V3.32b */
OS_U32 OS_STAT_GetNumActivations (OS_TASK *pTask); /* OSStat.c */
OS_U32 OS_STAT_GetNumPreemptions (OS_TASK *pTask); /* OSStat.c */
#else
#define OS_STAT_GetNumActivations(pTask) 0
#define OS_STAT_GetNumPreemptions(pTask) 0
#endif
/*********************************************************************
*
* Size info routines (OS_GetSize.c)
*
**********************************************************************
*/
int OS_WAIT_OBJ_GetSize(void);
int OS_WAIT_OBJ_EX_GetSize(void);
int OS_WAIT_LIST_GetSize(void);
int OS_EXTEND_TASK_CONTEXT_GetSize(void);
int OS_TASK_GetSize(void);
int OS_REGS_GetSize(void);
int OS_TIMER_GetSize(void);
int OS_TIMER_EX_GetSize(void);
int OS_TICK_HOOK_GetSize(void);
int OS_RSEMA_GetSize(void);
int OS_CSEMA_GetSize(void);
int OS_MAILBOX_GetSize(void);
int OS_Q_GetSize(void);
int OS_MEMF_GetSize(void);
int OS_EVENT_GetSize(void);
int OS_TRACE_ENTRY_GetSize(void);
/*********************************************************************
*
* Critical regions (OsKern.c)
*
**********************************************************************
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -