thr_priv.h
来自「澳洲人写的Cortex,包括uC_IP协议栈」· C头文件 代码 · 共 405 行 · 第 1/2 页
H
405 行
<i>crtx_Int_t</i> SuspendCntr;<font color="#6920ac">/* thread suspend counter */</font> <i>crtx_Void_t</i> *pEnviron; <font color="#6920ac">/* thread's environment */</font> <i>crtx_Int_t</i> Flags; <font color="#6920ac">/* flags */</font> <font color="#6920ac">/* thread's name */</font> <i>thrd_Entry4_t</i> Entry; <font color="#6920ac">/* thread's start entry */</font> <font color="#6920ac">/* thread's arguments */</font> <i>thrd_Arg_t</i> Args[<a href="THRD_MAX_ARGS_NUM.FIND-DEF">THRD_MAX_ARGS_NUM</a>]; <i>crtx_SegNum_t</i> Segment; <font color="#6920ac">/* memory segment */</font> <i>crtx_Void_t</i> *pStack; <font color="#6920ac">/* stack */</font> <i>crtx_Int_t</i> StackSize; <font color="#6920ac">/* stack size */</font> <i>thrd_SegDesc_t</i> *pSegDesc; <font color="#6920ac">/* thread's private memory segment */</font> <i>crtx_Char_t</i> Name[<a href="THRD_MAX_NAME_LEN.FIND-DEF">THRD_MAX_NAME_LEN</a>+1];<b><font color='DarkGreen'>#if</font></b><font color="maroon"> THRD_THREAD_TRACKER_ENABLED==1</font> <i>tick_Timeout_t</i> Ticks; <font color="#6920ac">/* System ticks used by thread */</font> <i>crtx_Uint32_t</i> Cycles; <font color="#6920ac">/* Timer cycles used by thread */</font> <i>tick_Timeout_t</i> MaxTicks; <font color="#6920ac">/* Maximum system ticks used by thread */</font> <i>crtx_Uint32_t</i> MaxCycles; <font color="#6920ac">/* Maximum timer cycles used by thread */</font> <i>crtx_Uint32_t</i> Switches; <font color="#6920ac">/* Thread Switches so far ... */</font> <i>crtx_Void_t</i> *pMaxSP; <font color="#6920ac">/* Max stack pointer var used */</font><b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* THRD_THREAD_TRACKER_ENABLED==1 */</font></font><b><font color='DarkGreen'>#if</font></b><font color="maroon"> ENVI_CRTX_ERR_CHECK_LEVEL > 0</font> <i>crtx_Uint32_t</i> CheckID; <font color="#6920ac">/* block id (for error checking) */</font><b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_CRTX_ERR_CHECK_LEVEL > 0 */</font></font>};<font color="#6920ac">/***************** * PRIVATE DATA * *****************/</font><font color="#6920ac">/* thread component initialisation flag */</font><i>extern</i> <i>crtx_Boolean_t</i> thrd_Initialised_g; <font color="#6920ac">/* pool of index linked lists are used by Thread component */</font><i>extern</i> <i>ilst_Pool_t</i> thrd_Pool_g;<font color="#6920ac">/* nodes table is required for ill pool */</font><i>extern</i> <i>ilst_Node_t</i> thrd_PoolTable_g[<a href="#THRD_POOL_TABLE_SIZE">THRD_POOL_TABLE_SIZE</a>];<font color="#6920ac">/* table of all linked lists is used by thread comonent (ready lists, * free list, sleeping list, etc */</font><i>extern</i> <i>ilst_List_t</i> thrd_ListTable_g[<a href="#THRD_LIST_TABLE_SIZE">THRD_LIST_TABLE_SIZE</a>];<font color="#6920ac">/* look up table to convert thread ID into thread control block address */</font><i>extern</i> <i>thrd_TCB_t</i> *thrd_TCBs_g[<a href="THRD_MAX_THREADS.FIND-DEF">THRD_MAX_THREADS</a>];<font color="#6920ac">/* component environment */</font><i>extern</i> <i>thrd_Environ_t</i> thrd_Environ_g;<font color="#6920ac">/********************************* * LOCAL PROCEDURES PROTOTYPES * *********************************/</font><font color="#6920ac">/* component initialisation routine */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_Init.FIND-FUNC">thrd_Init</a>(<i>crtx_Void_t</i>);</font><font color="#6920ac">/* protect internals of Thread Manager */</font><font color="#6920ac">/* FIX ME: must be defined as INLINE procedure */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_Protect.FIND-FUNC">thrd_Protect</a>(<i>crtx_Void_t</i>);</font><font color="#6920ac">/* unprotect internals of Thread Manager */</font><font color="#6920ac">/* FIX ME: must be defined as INLINE procedure */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_Unprotect.FIND-FUNC">thrd_Unprotect</a>(<i>crtx_Void_t</i>);</font><font color="#6920ac">/* get TCB address of running thread */</font><font size="+1"><i>thrd_TCB_t</i> *<a href="thrd_SelfTCB.FIND-FUNC">thrd_SelfTCB</a>(<i>crtx_Void_t</i>);</font><font color="#6920ac">/* preempt running thread to Sleep state */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_PreemptToSleep.FIND-FUNC">thrd_PreemptToSleep</a>(<i>tick_Timeout_t</i> Timeout_a);</font><font color="#6920ac">/* preempt running thread to Blocked state */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_PreemptToBlocked.FIND-FUNC">thrd_PreemptToBlocked</a>(<i>rque_Queue_t</i> *pQueue_a, <i>rque_Argument_t</i> QueueArg_a, <i>thrd_SuspendPolicy_t</i> SuspendPolicy_a);</font><font color="#6920ac">/* preempt running thread to Waiting state */</font><font size="+1"><i>crtx_Boolean_t</i> <a href="thrd_PreemptToWaiting.FIND-FUNC">thrd_PreemptToWaiting</a>(<i>rque_Queue_t</i> *pQueue_a, <i>rque_Argument_t</i> QueueArg_a, <i>thrd_SuspendPolicy_t</i> SuspendPolicy_a, <i>tick_Timeout_t</i> *pTimeout_a);</font><font color="#6920ac">/* preempt running thread to Suspend state */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_PreemptToSuspended.FIND-FUNC">thrd_PreemptToSuspended</a>(<i>crtx_Void_t</i>);</font><font color="#6920ac">/* preempt running thread to Terminated state */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_PreemptToTerminated.FIND-FUNC">thrd_PreemptToTerminated</a>(<i>crtx_Void_t</i>);</font><font color="#6920ac">/* resume thread */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_Resume.FIND-FUNC">thrd_Resume</a>(<i>thrd_ID_t</i> ThreadID_a);</font><font color="#6920ac">/* process system ticks */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_Tick.FIND-FUNC">thrd_Tick</a>(<i>crtx_Void_t</i>);</font><font color="#6920ac">/* disable preemption */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_Disable.FIND-FUNC">thrd_Disable</a>(<i>crtx_Void_t</i>);</font><font color="#6920ac">/* enable preemption */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_Enable.FIND-FUNC">thrd_Enable</a>(<i>crtx_Void_t</i>);</font><font color="#6920ac">/* routine to be executed at the beginning of every thread */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_Start.FIND-FUNC">thrd_Start</a>(<i>crtx_Void_t</i>);</font><font color="#6920ac">/* routine to be executed at the end of every thread */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_Stop.FIND-FUNC">thrd_Stop</a>(<i>crtx_Void_t</i>);</font><font color="#6920ac">/* switch thread context */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_SwitchStack.FIND-FUNC">thrd_SwitchStack</a>(<i>crtx_Void_t</i> **ppCurrSP, <i>crtx_Void_t</i> **ppNextSP);</font><font color="#6920ac">/* get CPU registers saved on thread context switch */</font><font size="+1"><i>crtx_Bool_t</i> <a href="thrd_GetStackFrameRegs.FIND-FUNC">thrd_GetStackFrameRegs</a>(<i>thrd_ID_t</i> ThreadID_a, <i>thrd_StackFrameRegs_t</i> *pRegs_a);</font><font color="#6920ac">/* pop stack arguments into CPU registers */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_ArgsToRegs.FIND-FUNC">thrd_ArgsToRegs</a>(<i>crtx_Void_t</i>);</font><font color="#6920ac">/* thread scheduler */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_Scheduler.FIND-FUNC">thrd_Scheduler</a>(<i>crtx_Void_t</i>);</font><font color="#6920ac">/* initalise thread's stack frame (CPU specific) */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_MakeThreadStackFrame.FIND-FUNC">thrd_MakeThreadStackFrame</a>(<i>thrd_TCB_t</i> *pTCB_a);</font><font color="#6920ac">/* check thread's stack (CPU specific) */</font><font size="+1"><i>crtx_Bool_t</i> <a href="thrd_CheckStack.FIND-FUNC">thrd_CheckStack</a>(<i>thrd_TCB_t</i> *pTCB_a);</font><font color="#6920ac">/* compares to stack pointers and returns one closest to the top */</font><font size="+1"><i>crtx_Void_t</i> *<a href="thrd_MaxSP.FIND-FUNC">thrd_MaxSP</a>(<i>crtx_Void_t</i> *pSP1_a, <i>crtx_Void_t</i> *pSP2_a);</font><b><font color='DarkGreen'>#if</font></b><font color="maroon"> THRD_THREAD_TRACKER_ENABLED==1</font><font color="#6920ac">/* returns adjusted value of max SP */</font><font size="+1"><i>crtx_Void_t</i> *<a href="thrd_AdjustMaxSP.FIND-FUNC">thrd_AdjustMaxSP</a>(<i>thrd_TCB_t</i> *pTCB_a);</font><b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* THRD_THREAD_TRACKER_ENABLED==1 */</font></font><font color="#6920ac">/* calculate thread's stack usage in % */</font><font size="+1"><i>crtx_Int_t</i> <a href="thrd_StackUsage.FIND-FUNC">thrd_StackUsage</a>(<i>crtx_Uint32_t</i> *pStackTop_a, <i>crtx_Uint32_t</i> *pStackBase_a, <i>crtx_Void_t</i> *pSP_a);</font><font color="#6920ac">/* returns list of thread's stack frames */</font><font size="+1"><i>crtx_Int_t</i> <a href="thrd_GetStackFrames.FIND-FUNC">thrd_GetStackFrames</a>(<i>thrd_TCB_t</i> *pTCB_a, <i>crtx_Int_t</i> Size_a, <i>thrd_StackFrame_t</i> *pFrames_a);</font><font color="#6920ac">/* get caller's stack frame pointer (may return NULL if service is * not available for particular port */</font><font size="+1"><i>crtx_Void_t</i> *<a href="thrd_GetStackFP.FIND-FUNC">thrd_GetStackFP</a>(<i>crtx_Void_t</i>);</font><font color="#6920ac">/* default idle thread */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_IdleThread.FIND-FUNC">thrd_IdleThread</a>(<i>crtx_Void_t</i>);</font><font color="#6920ac">/* adjust timeout values on sleep or waiting queues */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_AdjustTimeouts.FIND-FUNC">thrd_AdjustTimeouts</a>(<i>ilst_List_t</i> *pList_a);</font><font color="#6920ac">/* enable multi-thread environment and switch to main thread */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_StartMultiThreadEnviron.FIND-FUNC">thrd_StartMultiThreadEnviron</a>(<i>thrd_ID_t</i> ThreadID_a);</font><font color="#6920ac">/* return address of thread's segment control block */</font><font size="+1"><i>segm_Table_t</i> *<a href="thrd_Segment.FIND-FUNC">thrd_Segment</a>(<i>crtx_Void_t</i>);</font><font color="#6920ac">/* find thread control block */</font><font size="+1"><i>thrd_TCB_t</i> *<a href="thrd_FindThreadById.FIND-FUNC">thrd_FindThreadById</a>(<i>thrd_ID_t</i> ThreadID_a);</font><font color="#6920ac">/* notify system that thread has been terminated */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_Terminated.FIND-FUNC">thrd_Terminated</a>(<i>thrd_TCB_t</i> *pTCB_a);</font><font color="#6920ac">/* set thread's priority */</font><font size="+1"><i>crtx_Status_t</i> <a href="thrd_SetPriority.FIND-FUNC">thrd_SetPriority</a>(<i>thrd_ID_t</i> ThreadID_a, <i>prio_Level_t</i> Priority_a, <i>prio_Level_t</i> *pOldPriority_a);</font><font color="#6920ac">/* thread tracker */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_Tracker.FIND-FUNC">thrd_Tracker</a>(<i>thrd_TCB_t</i> *pTCB_a);</font><font color="#6920ac">/* get task tracker information */</font><font size="+1"><i>crtx_Status_t</i> <a href="thrd_TrackerInfo.FIND-FUNC">thrd_TrackerInfo</a>(<i>thrd_ID_t</i> ThreadID_a, <i>thrd_TrackerInfo_t</i> *pInfo_a, <i>crtx_Boolean_t</i> ResetFlag_a);</font><font color="#6920ac">/* acrivate defered thread */</font><font size="+1"><i>crtx_Status_t</i> <a href="thrd_Run.FIND-FUNC">thrd_Run</a>(<i>thrd_ID_t</i> ThreadID_a);</font><font color="#6920ac">/* create thread's private memory segment */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_CreatePrivMemSeg.FIND-FUNC">thrd_CreatePrivMemSeg</a>(<i>thrd_TCB_t</i> *pTCB_a, <i>thrd_SegAttr_t</i> *pSegAttr_a);</font><font color="#6920ac">/* delete thread's private memory segment */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_DeletePrivMemSeg.FIND-FUNC">thrd_DeletePrivMemSeg</a>(<i>thrd_TCB_t</i> *pTCB_a);</font><font color="#6920ac">/* thread stack corruption detected (does not return) */</font><font size="+1"><i>crtx_Void_t</i> <a href="thrd_StackCorrupted.FIND-FUNC">thrd_StackCorrupted</a>(<i>crtx_Char_t</i> *pState_a, <i>thrd_TCB_t</i> *pTCB_a);</font><font color="#6920ac">/* ===== END OF THE DEFINITION FILE ===== */</font><b><font color='DarkGreen'>#ifdef</font></b><font color="maroon"> __cplusplus</font>}<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* __cplusplus */</font></font><b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* __THR_PRIV__H */</font></font></pre></BODY></HTML>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?