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 }
时间: 2024-09-27 23:55:38