码迷,mamicode.com
首页 > 其他好文 > 详细

内存动态分配管理

时间:2016-04-28 10:40:02      阅读:308      评论:0      收藏:0      [点我收藏+]

标签:

 1 /**********************************************
 2 *                内存管理测试
 3 **********************************************/
 4 #include "includes.h"
 5 #define  TASK_STK_SIZE   512                //任务堆栈长度
 6 
 7 /******任务堆栈*********/
 8 OS_STK   TaskStartStk[TASK_STK_SIZE];        //任务堆栈区
 9 OS_STK   Stk_Task_1[TASK_STK_SIZE];            //任务1堆栈区
10 
11 
12 /********全局变量*****************/
13 INT16S            key;                        //用于退出uCOS_II的键    
14 INT8U            err;                        //错误代码
15 OS_MEM            *IntBuffer;                    //内存控制块指针
16 INT8U            IntPart[20][128];            //20块128字节
17 INT8U            *IntBlkPtr;                    //块指针
18 OS_MEM_DATA        MemInfor;                    //查询内存块信息
19 
20 
21 /*******任务声明************/
22 void MyTask(void * pdata);
23 void Task_1(void * pdata);            //任务1
24 
25 /************************主函数*********************************************/
26 void  main (void)
27 {
28     OSInit();                                        //初始化uCOS_II
29 
30     IntBuffer=OSMemCreate(IntPart,20,128,&err);        //创建动态内存分区
31 
32     PC_DOSSaveReturn();                                //保存Dos环境
33     PC_VectSet(uCOS, OSCtxSw);                        //安装uCOS_II中断
34 
35     OSTaskCreate(MyTask,0,&TaskStartStk[TASK_STK_SIZE - 1],0);                //使任务MyTask的优先级别为0
36     OSStart();                                        //启动uCOS_II的多任务管理
37 }
38 
39 
40 void  MyTask(void *pdata)
41 {
42 #if OS_CRITICAL_METHOD == 3
43     OS_CPU_SR  cpu_sr;
44 #endif
45 
46     pdata = pdata; 
47 
48     OS_ENTER_CRITICAL();
49     PC_VectSet(0x08, OSTickISR);        //安装uCOS_II时钟中断向量
50     PC_SetTickRate(OS_TICKS_PER_SEC);    //设置uCOS_II时钟频率
51     OS_EXIT_CRITICAL();
52 
53     OSStatInit();                        //初始化uCOS_II的统计任务
54     
55     /********创建任务*************/
56     //任务1,优先级别2
57     OSTaskCreate(Task_1,(void *)0,&Stk_Task_1[TASK_STK_SIZE-1],2);
58 
59     for (;;) 
60     {        
61         //如果按下Esc键则退出uCOS_II
62         if (PC_GetKey(&key) == TRUE) 
63         {
64             if (key == 0x1B) 
65             {
66                 PC_DOSReturn();
67             }
68         }
69 
70         OSTimeDlyHMSM(0, 0, 1, 0);    //等待
71     }
72 }
73 
74 //分配内存
75 void  Task_1(void *pdata)
76 {
77 #if OS_CRITICAL_METHOD == 3
78     OS_CPU_SR  cpu_sr;
79 #endif
80 
81     pdata=pdata;
82     while(1)
83     {
84         //申请内存
85         IntBlkPtr=OSMemGet(IntBuffer,&err);        //发送内存请求
86         OSMemQuery(IntBuffer,&MemInfor);        //内存控制块指针
87         //输出头指针
88         printf("MemInfor.OSFreeList:%x\n",MemInfor.OSFreeList);
89         printf("MemInfor.OSNUsed:%d\n",MemInfor.OSNUsed);
90         printf("MemInfor.OSNBlks:%d\n",MemInfor.OSNBlks);
91         printf("MemInfor.OSBlkSize:%d\n",MemInfor.OSBlkSize);
92         printf("----------------------------------------\n");
93         OSTimeDlyHMSM(0,0,1,0);
94         //释放内存
95         OSMemPut(IntBuffer,IntBlkPtr);            //参数1:分区指针;参数2:内存块指针
96         OSTimeDlyHMSM(0,0,1,0);
97     }
98 }
 

内存动态分配管理

标签:

原文地址:http://www.cnblogs.com/foggia2004/p/5441673.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!