内核实验五(μCOS-II的内存管理)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CommMsg1=OSMemGet(CommMem,&err); /* 第一次申请*/ …… CommMsg2=OSMemGet(CommMem,&err); /* 第二次申请*/ ……
CommMsg3=OSMemGet(CommMem,&err); /* 第三次申请*/ ……
ReleaseMem(i); /* 释放内存块 (i为 3,2,1) */
源程序说明
2、创建应用任务Task
OSTaskCreate(Task, (void *)&TaskData[0], &TaskStk[0][TASK_STK_SIZE - 1], 5);
3、应用任务
源程序说明
void Task (void *pdata) { for (;;) { ……
/* 无限循环 */
源程序说明
TaskStart负责: •安装时钟中断服务例程
•ucos_x86_idt_set_handler(0x20,(void *)OSTickISR,0x8e00);
•初始化操作系统时钟
•ucos_timer_init();
•初始化分区
•MemoryCreate();
•创建应用任务
•TaskStartCreateTasks();
#define OS_MEM_EN 1 /*是否允许使用内存管理的功能*/ #define OS_MEM_QUERY_EN /*是否允许使用OSMemQuery()*/ 1
操作系统配置
#define OS_MAX_TASKS /*最多可以创建2个任务*/
#define OS_LOWEST_PRIO /*任务优先级不可以大于7*/ #define OS_TASK_STAT_EN /* 禁止统计任务*/
内核实验(五)
µC/OS-II的内存管理
实验目的
掌握嵌入式实时操作系统µC/OS-II 内存管理中内存分配和回收的功能。
内存管理的原理
在µC/OS-II中,操作系统把连续的大块内 存按分区来管理。每个分区中包含有整数个 大小相同的内存块。用户的应用程序就可以 从不同的内存分区中得到不同大小的内存块。 但是,特定的内存块在释放时必须重新放回 它以前所属于的内存分区。
……
}
}
输出信息
2
7 0
#define OS_TIME_DLY_HMSM_EN 1 /*是否允许使用OSTimeDlyHMSM()*/
#define OS_TICKS_PER_SEC 200 /*设置每秒之内的时钟节拍数目*/
本实验中所用到的µC/OS-II相关函数
• OSTaskCreate():建立一个新任务 • OSMemCreate():初始化一个用于动态内存分配的区域 • OSMemGet() :从内存区域分配一个内存块
• OSMemPut():释放一个内存块
• OSMemQuery():得到内存区域的信息 • OSTimeDlyHMSM( ):将一个任务延时若干时间
源程序说明
1、创建起始任务TaskStart
OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 4);
实验设计
创建一个含有2个内存块的内存分区, 然后在这个分区中申请3次内存块,再释 放掉申请的内存块。
运行流程
内存块
试图申请内 存块3,失 败。
试图申请内 存块3,失败。 Nhomakorabea3 2
1
t1
t2 t3 t4 t5 t6 已分配: t7 t8 t9 t10 t11
时 间
未分配:
操作系统配置
#define OS_MAX_MEM_PART /*最多可以划分5个内存块*/ 5