thr_priv.h

来自「澳洲人写的Cortex,包括uC_IP协议栈」· C头文件 代码 · 共 405 行 · 第 1/2 页

H
405
字号
<HTML><HEAD><TITLE>/home/asysweb/public_html/cortex/kernel/src/thr_priv.h</TITLE></HEAD><BODY><pre><font color="#6920ac">/*************************************************************************/</font><font color="#6920ac">/*                                                                       */</font><font color="#6920ac">/*     Copyright (c) 1997-1999 Australian Real Time Embedded Systems     */</font><font color="#6920ac">/*                                                                       */</font><font color="#6920ac">/* PROPRIETARY RIGHTS of Australian Real Time Embedded Systems           */</font><font color="#6920ac">/* are involved in the subject matter of this material. All reproduction,*/</font><font color="#6920ac">/* manufacturing, use, and sales rights pertaining to this subject matter*/</font><font color="#6920ac">/* are governed by the license agreement. The recipient of this software */</font><font color="#6920ac">/* implicitly accepts the terms of the license.                          */</font><font color="#6920ac">/*                                                                       */</font><font color="#6920ac">/*************************************************************************/</font><font color="#6920ac">/************************************************************************* * * FILE NAME * *      thr_priv.h * * SYSTEM COMPONENT * *      Threads Management Compenent (THRD) * * DESCRIPTION * *      This file contains private data and constant definitions for *      Threads Management Compenent. * * SCCS HISTORY * *      @(#)thr_priv.h  1.20, 12/22/99, 15:56:37 * * AUTHOR * *      Vadim N. Azarovsky * * CREATED * *      10-Apr-1998         by Vadim N. Azarovsky * * REVISION HISTORY * *      NAME                DATE                    REMARKS * **************************************************************************/</font><b><font color='DarkGreen'>#ifndef</font></b><font color="maroon"> __THR_PRIV__H</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="__THR_PRIV__H">__THR_PRIV__H</a></font><b><font color='DarkGreen'>#ifdef</font></b><font color="maroon">  __cplusplus</font><i>extern</i> <font color="DarkGreen">"C"</font> {<b><font color='DarkGreen'>#endif</font></b><font color="maroon">  <font color="#6920ac">/* __cplusplus */</font></font><b><font color='DarkGreen'>#include</font></b> <a href="thr_defs.h.FIND-INC"><font color="blue">"thr_defs.h"</font></a><b><font color='DarkGreen'>#include</font></b> <a href="rlq_defs.h.FIND-INC"><font color="blue">"rlq_defs.h"</font></a><b><font color='DarkGreen'>#include</font></b> <a href="swi_priv.h.FIND-INC"><font color="blue">"swi_priv.h"</font></a><b><font color='DarkGreen'>#include</font></b> <a href="rrl_defs.h.FIND-INC"><font color="blue">"rrl_defs.h"</font></a><b><font color='DarkGreen'>#include</font></b> <a href="seg_defs.h.FIND-INC"><font color="blue">"seg_defs.h"</font></a><font color="#6920ac">/*********************** *  PRIVATE CONSTANSTS * ***********************/</font><font color="#6920ac">/* "THRB" - Thread Control Block */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_BLOCK_ID">THRD_BLOCK_ID</a></font>           0x54485242      <font color="#6920ac">/* "THRB" */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_STACK_STAMP">THRD_STACK_STAMP</a></font>        0x54485253Ul    <font color="#6920ac">/* "THRS"-Thread Stack-stamp */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_STACK_PATTERN">THRD_STACK_PATTERN</a></font>      0x5A5A5A5AUl    <font color="#6920ac">/* bits pattern */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_LIST_TABLE_SIZE">THRD_LIST_TABLE_SIZE</a></font>    (THRD_READY+PRIO_LEVELS)<b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_POOL_TABLE_SIZE">THRD_POOL_TABLE_SIZE</a></font>    (THRD_MAX_THREADS+(THRD_LIST_TABLE_SIZE)*2)<b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_IDLE_ENTRY">THRD_IDLE_ENTRY</a></font>         ENVI_THRD_IDLE_ENTRY<font color="#6920ac">/****************** * PRIVATE MACROS * ******************/</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_FREE_LIST">THRD_FREE_LIST</a></font>()            (&amp;thrd_ListTable_g[THRD_FREE])<b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_SLEEP_LIST">THRD_SLEEP_LIST</a></font>()           (&amp;thrd_ListTable_g[THRD_SLEEP])<b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_WAITING_LIST">THRD_WAITING_LIST</a></font>()         (&amp;thrd_ListTable_g[THRD_WAITING])<b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_BLOCKED_LIST">THRD_BLOCKED_LIST</a></font>()         (&amp;thrd_ListTable_g[THRD_BLOCKED])<b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_SUSPENDED_LIST">THRD_SUSPENDED_LIST</a></font>()       (&amp;thrd_ListTable_g[THRD_SUSPENDED])<b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_DEFERRED_LIST">THRD_DEFERRED_LIST</a></font>()        (&amp;thrd_ListTable_g[THRD_DEFERRED])<b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_TERMINATED_LIST">THRD_TERMINATED_LIST</a></font>()      (&amp;thrd_ListTable_g[THRD_TERMINATED])<b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_READY_LIST">THRD_READY_LIST</a></font>(_level)     (&amp;thrd_ListTable_g[THRD_READY+(_level)])<b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_POOL">THRD_POOL</a></font>()                 (&amp;thrd_Pool_g)<b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_PREEMPT">THRD_PREEMPT</a></font>() \        { \            <i>crtx_Int_t</i>  thrd_Preemption_l = thrd_Environ_g.Preemption; \            <i>crtx_Int_t</i>  thrd_Global_l = sfti_Environ_g.Global; \            <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(sfti_Environ_g.Global &gt; 0) \            sfti_Environ_g.Global = 1; \            thrd_Environ_g.Preemption = 0; \            <a href="thrd_Scheduler.FIND-FUNC">thrd_Scheduler</a>(); \            thrd_Environ_g.Preemption = thrd_Preemption_l; \            sfti_Environ_g.Global = thrd_Global_l; \        } \<b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_SELF_ID">THRD_SELF_ID</a></font>()  thrd_Environ_g.Running<b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_PREV_ID">THRD_PREV_ID</a></font>()  thrd_Environ_g.PrevRunning<b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_SELF_TCB">THRD_SELF_TCB</a></font>() thrd_TCBs_g[THRD_SELF_ID()]<b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_TCB">THRD_TCB</a></font>(_ThreadID_a)   thrd_TCBs_g[_ThreadID_a]<font color="#6920ac">/* advance time-slice value */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_PROCESS_TIMESLICE">THRD_PROCESS_TIMESLICE</a></font>() \        <b>if</b> (thrd_Environ_g.TimeSliceEnable &amp;&amp; thrd_Environ_g.TimeSlice&gt;0) \            thrd_Environ_g.TimeSlice--<font color="#6920ac">/* check if time-slice has been expired */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_IS_TIMESLICE_EXPIRED">THRD_IS_TIMESLICE_EXPIRED</a></font>() \        thrd_Environ_g.TimeSliceExpired<font color="#6920ac">/*  * Flag manipulation macros */</font><font color="#6920ac">/* Short "C"-style arguments */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_FLAG_IS_ARGS_TYPE_1">THRD_FLAG_IS_ARGS_TYPE_1</a></font>(_Flags_a) \        (((_Flags_a)&amp;<a href="THRD_FLAG_ARGS_TYPE_MASK.FIND-DEF">THRD_FLAG_ARGS_TYPE_MASK</a>)==<a href="THRD_FLAG_ARGS_TYPE_1.FIND-DEF">THRD_FLAG_ARGS_TYPE_1</a>)<font color="#6920ac">/* Long "C"-style arguments */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_FLAG_IS_ARGS_TYPE_2">THRD_FLAG_IS_ARGS_TYPE_2</a></font>(_Flags_a) \        (((_Flags_a)&amp;<a href="THRD_FLAG_ARGS_TYPE_MASK.FIND-DEF">THRD_FLAG_ARGS_TYPE_MASK</a>)==<a href="THRD_FLAG_ARGS_TYPE_2.FIND-DEF">THRD_FLAG_ARGS_TYPE_2</a>)<font color="#6920ac">/* Opposite short "C"-style arguments */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_FLAG_IS_ARGS_TYPE_3">THRD_FLAG_IS_ARGS_TYPE_3</a></font>(_Flags_a) \        (((_Flags_a)&amp;<a href="THRD_FLAG_ARGS_TYPE_MASK.FIND-DEF">THRD_FLAG_ARGS_TYPE_MASK</a>)==<a href="THRD_FLAG_ARGS_TYPE_3.FIND-DEF">THRD_FLAG_ARGS_TYPE_3</a>)<font color="#6920ac">/* Fixed number of arguments (upto THRD_MAX_ARGS_NUM arguments */</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_FLAG_IS_ARGS_TYPE_4">THRD_FLAG_IS_ARGS_TYPE_4</a></font>(_Flags_a) \        (((_Flags_a)&amp;<a href="THRD_FLAG_ARGS_TYPE_MASK.FIND-DEF">THRD_FLAG_ARGS_TYPE_MASK</a>)==<a href="THRD_FLAG_ARGS_TYPE_4.FIND-DEF">THRD_FLAG_ARGS_TYPE_4</a>)<b><font color='DarkGreen'>#if</font></b><font color="maroon"> ENVI_CRTX_ERR_CHECK_LEVEL == 0</font><b><font color='DarkGreen'># define</font></b> <font color="maroon"><a name="THRD_SET_BLOCK_ID">THRD_SET_BLOCK_ID</a></font>(_block)      <b><font color='DarkGreen'># define</font></b> <font color="maroon"><a name="THRD_CHECK_BLOCK_ID">THRD_CHECK_BLOCK_ID</a></font>(_block)    (CRTX_TRUE)<b><font color='DarkGreen'>#else</font></b><font color="maroon"></font><b><font color='DarkGreen'># define</font></b> <font color="maroon"><a name="THRD_SET_BLOCK_ID">THRD_SET_BLOCK_ID</a></font>(_block)      ((_block)-&gt;CheckID=THRD_BLOCK_ID)<b><font color='DarkGreen'># define</font></b> <font color="maroon"><a name="THRD_CHECK_BLOCK_ID">THRD_CHECK_BLOCK_ID</a></font>(_block)    ((_block)-&gt;CheckID==THRD_BLOCK_ID)<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* ENVI_CRTX_ERR_CHECK_LEVEL == 0 */</font></font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_DISABLE">THRD_DISABLE</a></font>() \        <a href="hrdi_Inc.FIND-FUNC">hrdi_Inc</a>(&amp;thrd_Environ_g.Preemption)<b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="THRD_ENABLE">THRD_ENABLE</a></font>() \        <b>if</b> (thrd_Environ_g.Preemption &gt; 0) thrd_Environ_g.Preemption--<font color="#6920ac">/*********************** * PRIVATE DATA TYPES  * ***********************/</font><font color="#6920ac">/* thread control block */</font><i><a name="thrd_TCB_t">typedef</a></i> <i>struct</i> thrd_TCB_s <i><font color='DarkBlue'>thrd_TCB_t</font></i>;<font color="#6920ac">/* thread Component Environmental Strucure */</font><i><a name="thrd_Environ_t">typedef</a></i> <i>struct</i> {    <i>crtx_Boolean_t</i>  MultiThrdMode;  <font color="#6920ac">/* multi-thread mode enable/disable flag */</font>    <i>thrd_ID_t</i>       Running;        <font color="#6920ac">/* running thread */</font>    <i>thrd_ID_t</i>       PrevRunning;    <font color="#6920ac">/* previously running thread */</font>    <i>crtx_Int_t</i>      Preemption;     <font color="#6920ac">/* thread preemption counter */</font>    <i>thrd_ID_t</i>       IdleID;         <font color="#6920ac">/* idle thread id */</font>    <i>thrd_ID_t</i>       MainID;         <font color="#6920ac">/* main thread id */</font>    <i>crtx_Boolean_t</i>  TimeSliceEnable;<font color="#6920ac">/* time slice enable flag */</font>    <i>tick_Timeout_t</i>  TimeSlice;      <font color="#6920ac">/* current time slice */</font>    <i>crtx_Boolean_t</i>  TimeSliceExpired;   <font color="#6920ac">/* time-slice expired flag */</font>    <i>crtx_Int_t</i>      ActiveThreads;  <font color="#6920ac">/* total number of active threads */</font>    <i>crtx_Int_t</i>      DemonThreads;   <font color="#6920ac">/* number of demons */</font>    <i>rrlc_Lock_t</i>     Lock;           <font color="#6920ac">/* resource lock */</font><b><font color='DarkGreen'>#if</font></b><font color="maroon"> THRD_THREAD_TRACKER_ENABLED==1</font>    <i>crtx_Int_t</i>      SwitchTicks;        <font color="#6920ac">/* ticks since last context switch */</font>    <i>crtx_Uint32_t</i>   SwitchClocks;       <font color="#6920ac">/* timer clocks when last context                                          * switch occured */</font><b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* THRD_THREAD_TRACKER_ENABLED==1 */</font></font>} <i><font color='DarkBlue'>thrd_Environ_t</font></i>;<font color="#6920ac">/* private memory segment descriptor */</font><i><a name="thrd_SegDesc_t">typedef</a></i> <i>struct</i> {    <i>crtx_Void_t</i>     *pSegBase;  <font color="#6920ac">/* segment base address */</font>    <i>crtx_Int_t</i>      SegSize;    <font color="#6920ac">/* size of memory segment */</font>    <i>crtx_SegNum_t</i>   Segment;    <i>segm_Table_t</i>    SegTable;} <i><font color='DarkBlue'>thrd_SegDesc_t</font></i>;<font color="#6920ac">/* Thread Control Block */</font><i>struct</i> thrd_TCB_s {    <i>thrd_ID_t</i>           ThreadID;   <font color="#6920ac">/* thread ID */</font>    <i>thrd_State_t</i>        State;      <font color="#6920ac">/* thread state */</font>    <i>prio_Level_t</i>        Priority;   <font color="#6920ac">/* priority level */</font>    <i>prio_Info_t</i>         PrioInfo;   <font color="#6920ac">/* priority control block */</font>    <i>thrd_SchdPolicy_t</i>   SchdPolicy; <font color="#6920ac">/* scheduling policy */</font>    <i>tick_Timeout_t</i>      TimeSlice;  <font color="#6920ac">/* thread time slice (for TS policy) */</font>    <i>tick_Timeout_t</i>      CurrTimeSlice; <font color="#6920ac">/* current time slice */</font>    <i>crtx_Boolean_t</i>      Timeout;    <font color="#6920ac">/* signal timeout flag */</font>    <i>tick_Timeout_t</i>      WaitTstamp; <font color="#6920ac">/* wait timestamp */</font>    <i>tick_Timeout_t</i>      ResTstamp;  <font color="#6920ac">/* resume timestamp */</font>    <i>crtx_Void_t</i>         *pSP;       <font color="#6920ac">/* Stack Pointer (SP) */</font>    <i>crtx_Uint32_t</i>       *pStackBase;<font color="#6920ac">/* stack base address */</font>    <i>crtx_Uint32_t</i>       *pStackTop; <font color="#6920ac">/* stack top address */</font>    <i>rque_Node_t</i>         Suspend;    <font color="#6920ac">/* thread suspension block */</font>

⌨️ 快捷键说明

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