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 = &SegAttrTask1; <b>if</b> (<a href="task_Create1.FIND-FUNC">task_Create1</a>((<i>task_Entry1_t</i>)mem_test_task1, &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 = &SegAttrTask2; <b>if</b> (<a href="task_Create1.FIND-FUNC">task_Create1</a>((<i>task_Entry1_t</i>)mem_test_task2, &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<<(<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,&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,&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>(&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>(&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>(&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>,&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,&MemInfo)\n"</font>); <a href="dmem_Print.FIND-FUNC">dmem_Print</a>(); <b>return</b>;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?