main.c

来自「澳洲人写的Cortex,包括uC_IP协议栈」· C语言 代码 · 共 803 行 · 第 1/3 页

C
803
字号
<HTML><HEAD><TITLE>/home/asysweb/public_html/cortex/tests/mem_test/src/main.c</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><b><font color='DarkGreen'>#include</font></b> <a href="cortex.h.FIND-INC"><font color="blue">"cortex.h"</font></a><b><font color='DarkGreen'>#include</font></b> <a href="plt_defs.h.FIND-INC"><font color="blue">"plt_defs.h"</font></a><b><font color='DarkGreen'>#include</font></b> <a href="crt_defs.h.FIND-INC"><font color="blue">"crt_defs.h"</font></a><b><font color='DarkGreen'>#include</font></b> <a href="prn_defs.h.FIND-INC"><font color="blue">"prn_defs.h"</font></a><b><font color='DarkGreen'>#include</font></b> <a href="mm1_defs.h.FIND-INC"><font color="blue">"mm1_defs.h"</font></a><b><font color='DarkGreen'>#include</font></b> <a href="mm1_priv.h.FIND-INC"><font color="blue">"mm1_priv.h"</font></a><b><font color='DarkGreen'>#include</font></b> <a href="tsk_defs.h.FIND-INC"><font color="blue">"tsk_defs.h"</font></a><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="mem_dbg.h.FIND-INC"><font color="blue">"mem_dbg.h"</font></a><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="STACK_SEGMENT">STACK_SEGMENT</a></font>      5<font color="#6920ac">/*#define NUM_LOCAL_SEGM_1    (SEGM_MAX_NUMBER)*/</font><b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="NUM_LOCAL_SEGM_2">NUM_LOCAL_SEGM_2</a></font>     (SEGM_MAX_NUMBER+SEGM_MAX_DYN_NUMBER-2)<b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="NUM_LOCAL_SEGM_3">NUM_LOCAL_SEGM_3</a></font>     (SEGM_MAX_NUMBER+SEGM_MAX_DYN_NUMBER-1)<b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="LOCAL_SEGM_BASE_SIZE">LOCAL_SEGM_BASE_SIZE</a></font> 2048<b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="LOCAL_SEGM_MAX_BASE">LOCAL_SEGM_MAX_BASE</a></font>  16<b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="ALLOC_MAX_NUMBER">ALLOC_MAX_NUMBER</a></font>     1000<b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="SIZE_SEGMENT_TASK1">SIZE_SEGMENT_TASK1</a></font>   10000<b><font color='DarkGreen'>#define</font></b> <font color="maroon"><a name="SIZE_SEGMENT_TASK2">SIZE_SEGMENT_TASK2</a></font>   10000<i>crtx_SegNum_t</i> Local_Segm_Links[] = {<a href="#NUM_LOCAL_SEGM_2">NUM_LOCAL_SEGM_2</a>, <a href="#NUM_LOCAL_SEGM_3">NUM_LOCAL_SEGM_3</a>};<i>segm_Table_t</i>  Local_Segm = {    0,    0,    <a href="DMEM_NULL.FIND-DEF">DMEM_NULL</a>,    <i>sizeof</i>(Local_Segm_Links)/<i>sizeof</i>(Local_Segm_Links[0]),    Local_Segm_Links,    mem1_Create,    mem1_Alloc,    mem1_AllocSt,    mem1_Free,    <a href="DMEM_NULL.FIND-DEF">DMEM_NULL</a>,    mem1_Info,    mem1_Check};<i>segm_Table_t</i>  Local_Segm2 = {    0,    0,    <a href="DMEM_NULL.FIND-DEF">DMEM_NULL</a>,    0,    <a href="DMEM_NULL.FIND-DEF">DMEM_NULL</a>,    mem1_Create,    mem1_Alloc,    mem1_AllocSt,    mem1_Free,    <a href="DMEM_NULL.FIND-DEF">DMEM_NULL</a>,    mem1_Info,    mem1_Check};<i>segm_Table_t</i>  Local_Segm3 = {    0,    0,    <a href="DMEM_NULL.FIND-DEF">DMEM_NULL</a>,    0,    <a href="DMEM_NULL.FIND-DEF">DMEM_NULL</a>,    mem1_Create,    mem1_Alloc,    mem1_AllocSt,    mem1_Free,    <a href="DMEM_NULL.FIND-DEF">DMEM_NULL</a>,    mem1_Info,    mem1_Check};<i>thrd_SegAttr_t</i> SegAttrTask1 = {    <a href="DMEM_NULL.FIND-DEF">DMEM_NULL</a>,    <a href="#SIZE_SEGMENT_TASK1">SIZE_SEGMENT_TASK1</a>,    <a href="SEGM_DEF_SEGMENT.FIND-DEF">SEGM_DEF_SEGMENT</a>,    <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>,    mem1_Create,    mem1_Alloc,    mem1_AllocSt,    mem1_Free,    <a href="DMEM_NULL.FIND-DEF">DMEM_NULL</a>,    mem1_Info,    mem1_Check};<i>thrd_SegAttr_t</i> SegAttrTask2 = {    <a href="DMEM_NULL.FIND-DEF">DMEM_NULL</a>,    <a href="#SIZE_SEGMENT_TASK2">SIZE_SEGMENT_TASK2</a>,    <a href="SEGM_DEF_SEGMENT.FIND-DEF">SEGM_DEF_SEGMENT</a>,    <a href="DMEM_NULL.FIND-DEF">DMEM_NULL</a>,    mem1_Create,    mem1_Alloc,    mem1_AllocSt,    mem1_Free,    <a href="DMEM_NULL.FIND-DEF">DMEM_NULL</a>,    mem1_Info,    mem1_Check};<i>crtx_Void_t</i>         *p1[<a href="#ALLOC_MAX_NUMBER">ALLOC_MAX_NUMBER</a>];<i>crtx_Int32_t</i>        p1sz[(<i>sizeof</i>(p1)/<i>sizeof</i>(p1[0]))];<i>crtx_Int32_t</i>        sp1[(<i>sizeof</i>(p1)/<i>sizeof</i>(p1[0]))];<i>crtx_Void_t</i>         *p2[1000];<i>crtx_Int32_t</i>        p2sz[(<i>sizeof</i>(p2)/<i>sizeof</i>(p2[0]))];<i>crtx_Int32_t</i>        sp2[(<i>sizeof</i>(p2)/<i>sizeof</i>(p2[0]))];<i>crtx_Int_t</i> <i>volatile</i> fltest1;<i>crtx_Int_t</i> <i>volatile</i> fltest2;<font size="+1"><i>crtx_Void_t</i> <a href="mem_test_task1.FIND-FUNC">mem_test_task1</a>(<i>crtx_Void_t</i>);</font><font size="+1"><i>crtx_Void_t</i> <a href="mem_test_task2.FIND-FUNC">mem_test_task2</a>(<i>crtx_Void_t</i>);</font><i>static</i> <i>crtx_SegNum_t</i>          <a href="NUM_LOCAL_SEGM_1.FIND-DEF">NUM_LOCAL_SEGM_1</a>;<font size="+1"><i>void</i> <b><font color="azure1"><a name="mem_test_main">mem_test_main</a></font></b> () {</font>    <i>crtx_Int_t</i>      cycl;    <i>crtx_Int32_t</i>    segsize;    <i>crtx_Bool_t</i>     locate;    <i>crtx_Void_t</i>     *pmem;    <i>crtx_Int32_t</i>    crsize;    <i>crtx_Uint16_t</i>   algn;    <i>dmem_MemInfo_t</i>  MemInfo;    <i>dmem_MemInfo_t</i>  MemInfo1;    <i>task_Attr_t</i>     Attr;    <i>crtx_Int_t</i>      rrr;    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"\n%s (Version: %s)\n\n"</font>, <a href="syst_Copyright.FIND-FUNC">syst_Copyright</a>(), <a href="syst_VersionStr.FIND-FUNC">syst_VersionStr</a>());    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"\nTest of memory manager\n"</font>);    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"Start memory test tasks\n"</font>);<a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"crtx_Int32_t RAND_MAX=%lx %ld\n"</font>,       (<i>crtx_Int32_t</i>)<a href="RAND_MAX.FIND-DEF">RAND_MAX</a>,(<i>crtx_Int32_t</i>)<a href="RAND_MAX.FIND-DEF">RAND_MAX</a>);rrr = <a href="RAND_MAX.FIND-DEF">RAND_MAX</a>;<a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"crtx_Int_t RAND_MAX=%x %d\n"</font>,       rrr%9,rrr%4);<a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"crtx_Int_t RAND_MAX=%x %d\n"</font>,       (rrr%9)*19+200,(rrr%4)*19+200);    fltest1 = fltest2 = 0;    Attr = task_AttrDefault_g;    Attr.pSegDesc = &amp;SegAttrTask1;    <b>if</b> (<a href="task_Create1.FIND-FUNC">task_Create1</a>((<i>task_Entry1_t</i>)mem_test_task1, &amp;Attr,                     <a href="NULL.FIND-DEF">NULL</a>, 0, <a href="NULL.FIND-DEF">NULL</a>)==<a href="TASK_ILLEGAL_ID.FIND-DEF">TASK_ILLEGAL_ID</a>)    {        <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"Create Task1 failed\n"</font>);        <b>return</b>;    }    Attr.pSegDesc = &amp;SegAttrTask2;    <b>if</b> (<a href="task_Create1.FIND-FUNC">task_Create1</a>((<i>task_Entry1_t</i>)mem_test_task2, &amp;Attr,                     <a href="NULL.FIND-DEF">NULL</a>, 0, <a href="NULL.FIND-DEF">NULL</a>)==<a href="TASK_ILLEGAL_ID.FIND-DEF">TASK_ILLEGAL_ID</a>)    {        <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"Create Task2 failed\n"</font>);        <b>return</b>;    }    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"Test of alloc and free mem for segment 0\n"</font>);    <b>for</b> ( ;; ) {        locate = <a href="CRTX_TRUE.FIND-DEF">CRTX_TRUE</a>;        <b>switch</b> (<a href="rand.FIND-FUNC">rand</a>()%5) {            <b>case</b> 0: <font color="#6920ac">/* create large segment */</font>                crsize = (<a href="rand.FIND-FUNC">rand</a>()%9)*19 + 200;                locate = <a href="CRTX_FALSE.FIND-DEF">CRTX_FALSE</a>;                <b>break</b>;            <font color="blue"><b>default</b>:</font>                crsize = <a href="rand.FIND-FUNC">rand</a>()%120;        }        algn = 4&lt;&lt;(<a href="rand.FIND-FUNC">rand</a>()%7);        <b>if</b> (locate)            pmem = <a href="dmem_Alloc.FIND-FUNC">dmem_Alloc</a>(0,crsize,algn);        <b>else</b>            pmem = <a href="dmem_AllocStack.FIND-FUNC">dmem_AllocStack</a>(0,crsize,algn);        <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"Pmem=%p crsize=%ld(%lx) algn=%d\n"</font>,pmem,crsize,crsize,algn);        <b>if</b> (pmem==<a href="DMEM_NULL.FIND-DEF">DMEM_NULL</a>) <b>break</b>;    }    <b>if</b> (<a href="dmem_Info.FIND-FUNC">dmem_Info</a>(0,&amp;MemInfo)==<a href="DMEM_NULL.FIND-DEF">DMEM_NULL</a>)    {        <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"Error of dmem_Info(0,&amp;MemInfo)\n"</font>);        <b>return</b>;    }    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"S=%ld AS=%ld U=%ld AU=%ld F=%ld AF=%ld M=%ld AM=%ld\n"</font>,           MemInfo.Size,MemInfo.ASize,MemInfo.Used,MemInfo.AUsed,           MemInfo.Free,MemInfo.AFree,MemInfo.Max,MemInfo.AMax);    <b>for</b> (cycl=0;;cycl++)    {        <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"\n************ Cycle %d ************** \n"</font>,cycl);        <a href="dmem_Print.FIND-FUNC">dmem_Print</a>();                <a href="NUM_LOCAL_SEGM_1.FIND-DEF">NUM_LOCAL_SEGM_1</a> = <a href="SEGM_MAX_NUMBER.FIND-DEF">SEGM_MAX_NUMBER</a> + <a href="rand.FIND-FUNC">rand</a>()%4;        segsize = <a href="#LOCAL_SEGM_BASE_SIZE">LOCAL_SEGM_BASE_SIZE</a> * (<a href="rand.FIND-FUNC">rand</a>()%(<a href="#LOCAL_SEGM_MAX_BASE">LOCAL_SEGM_MAX_BASE</a>-1) + 1);        Local_Segm2.ad = <a href="malloc.FIND-FUNC">malloc</a>(segsize);        <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"Create local segment:%p(%ld)\n"</font>,Local_Segm2.ad,segsize);                <b>if</b> (Local_Segm2.ad == <a href="DMEM_NULL.FIND-DEF">DMEM_NULL</a>) {            <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"Create segment failed\n"</font>);            <a href="dmem_Print.FIND-FUNC">dmem_Print</a>();                    <b>break</b>;        }                Local_Segm2.sz = segsize;        Local_Segm2.pcontext = Local_Segm2.ad;        <b>if</b> (!<a href="segm_Define.FIND-FUNC">segm_Define</a>(&amp;Local_Segm2, <a href="#NUM_LOCAL_SEGM_2">NUM_LOCAL_SEGM_2</a>)) {            <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"Local segment define failed\n"</font>);            <a href="dmem_Print.FIND-FUNC">dmem_Print</a>();                    <b>break</b>;        }        segsize = <a href="#LOCAL_SEGM_BASE_SIZE">LOCAL_SEGM_BASE_SIZE</a> * (<a href="rand.FIND-FUNC">rand</a>()%(<a href="#LOCAL_SEGM_MAX_BASE">LOCAL_SEGM_MAX_BASE</a>-1) + 1);        Local_Segm3.ad = <a href="malloc.FIND-FUNC">malloc</a>(segsize);        <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"Create local segment:%p(%ld)\n"</font>,Local_Segm3.ad,segsize);                <b>if</b> (Local_Segm3.ad == <a href="DMEM_NULL.FIND-DEF">DMEM_NULL</a>) {            <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"Create segment failed\n"</font>);            <a href="dmem_Print.FIND-FUNC">dmem_Print</a>();                    <b>break</b>;        }                Local_Segm3.sz = segsize;        Local_Segm3.pcontext = Local_Segm3.ad;        <b>if</b> (!<a href="segm_Define.FIND-FUNC">segm_Define</a>(&amp;Local_Segm3, <a href="#NUM_LOCAL_SEGM_3">NUM_LOCAL_SEGM_3</a>)) {            <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"Local segment define failed\n"</font>);            <a href="dmem_Print.FIND-FUNC">dmem_Print</a>();                    <b>break</b>;        }        <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"Create Main local segment %d\n"</font>,<a href="NUM_LOCAL_SEGM_1.FIND-DEF">NUM_LOCAL_SEGM_1</a>);        <b>if</b> (!<a href="segm_Define.FIND-FUNC">segm_Define</a>(&amp;Local_Segm, <a href="NUM_LOCAL_SEGM_1.FIND-DEF">NUM_LOCAL_SEGM_1</a>)) {            <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"Main Local segment define failed\n"</font>);            <b>break</b>;        }        <font color="#6920ac">/* print segments info */</font>        <a href="dmem_Print.FIND-FUNC">dmem_Print</a>();        <b>if</b> (<a href="dmem_Info.FIND-FUNC">dmem_Info</a>(<a href="NUM_LOCAL_SEGM_1.FIND-DEF">NUM_LOCAL_SEGM_1</a>,&amp;MemInfo)==<a href="DMEM_NULL.FIND-DEF">DMEM_NULL</a>)        {            <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"Error of dmem_Info(NUM_LOCAL_SEGM_1,&amp;MemInfo)\n"</font>);            <a href="dmem_Print.FIND-FUNC">dmem_Print</a>();                    <b>return</b>;

⌨️ 快捷键说明

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