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 &gt; 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 &gt; 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 + -
显示快捷键?