2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
|
static void ShowMemInfo(void)
{ OS_MEM_DATA mem_data; OSMemQuery(pmem,&mem_data); printf( "Begining Address of memory:\t%X\r\n",(int)(mem_data.OSAddr)); printf( "Block Size in the memory area:\t%d\r\n",(int)(mem_data.OSBlkSize)); printf( "Free Blocks in the memory area:\t%d\r\n", (int)(mem_data.OSNFree)); printf( "Used Blocks in the memory area:\t%d\r\n", (int)mem_data.OSNUsed); printf("\r\n\n"); OSTimeDlyHMSM(0,0,2,0); } static void GetMem(INT8U i) { INT8U err; //申请内存空间 pmemmsg[i] = OSMemGet(pmem,&err); if(pmemmsg[i] != (void*)NULL && err == OS_NO_ERR) { printf("GOT memory_%d.\r\n",i); //内存块已经分配 ShowMemInfo(); } else printf("NOT got memory_%d.\r\n",i); } static void PutMem(void* pmemmsg,INT8U i) void TaskMem1(void* pdata) void TaskMem2(void* pdata) |
2 3 4 5 |
|
#define MSGSIZE 3
GLOBAL OS_MEM *pmem; //为OSMemCreate函数设置返回值存储 GLOBAL void* pmemmsg[3]; //为OSMemGet函数设置返回值存储 GLOBAL INT8U MemBuf[2][128]; //初始化内存分配的空间 |
2 3 4 5 6 7 8 9 10 11 |
|
#define MEM1_STK_SIZE 64
#define MEM2_STK_SIZE 64 #define MEM1_TASK_PRIO 20 GLOBAL OS_STK TASK_MEM1_STK[MEM1_STK_SIZE]; void TaskMem1(void* pdata); |
2 3 4 5 |
|
/* 实验五 内存管理 */
pmem = OSMemCreate(MemBuf, 2, 128, &err); OSTaskCreate(TaskMem1, 0, (OS_STK *)&TASK_MEM1_STK[MEM1_STK_SIZE - 1], MEM1_TASK_PRIO); |