嵌入式μCOS-II内核实验四(哲学家就餐问题的实现)

上传人:油条 文档编号:1272164 上传时间:2017-06-04 格式:PPT 页数:13 大小:373.50KB
返回 下载 相关 举报
嵌入式μCOS-II内核实验四(哲学家就餐问题的实现)_第1页
第1页 / 共13页
嵌入式μCOS-II内核实验四(哲学家就餐问题的实现)_第2页
第2页 / 共13页
嵌入式μCOS-II内核实验四(哲学家就餐问题的实现)_第3页
第3页 / 共13页
嵌入式μCOS-II内核实验四(哲学家就餐问题的实现)_第4页
第4页 / 共13页
嵌入式μCOS-II内核实验四(哲学家就餐问题的实现)_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《嵌入式μCOS-II内核实验四(哲学家就餐问题的实现)》由会员分享,可在线阅读,更多相关《嵌入式μCOS-II内核实验四(哲学家就餐问题的实现)(13页珍藏版)》请在金锄头文库上搜索。

1、内核实验(四),哲学家就餐问题的实现,实验目的,掌握在基于嵌入式实时操作系统C/OS-II的应用中,任务使用信号量的一般原理。通过经典的哲学家就餐实验,了解如何利用信号量来对共享资源进行互斥访问。,5个任务:Task0、Task1、 Task2、 Task3、 Task4 5个信号量:Sem0, Sem1, Sem2, Sem3, Sem4 优先级: Task0Task1Task2Task3Task4 每个任务i均作相同的工作: 申请信号量i, (i+1) mod 5;保持信号量;释放信号量(i+1) mod 5,i,实验设计,实验设计,1、Task0 Task4先后执行,显示“thinkin

2、g” , 然后挂起;2、Task0 Task4延时先后到期,显示“hungry” ,然后挂起;3、 Task0、2、4、1、3先后获得信号量号,显示“eating ”,然后挂起 ;4、,运行流程,#define OS_TASK_CREATE_EN 1 /*允许使用OSTaskCreate()*/,#define OS_MAX_TASKS 6 /*最多可以创建6个任务*/,#define OS_TASK_STAT_EN 0 /* 禁止统计任务*/,#define OS_TASK_CREATE_EXT_EN 1 /*是否允许使用OSTaskCreateExt()*/,操作系统配置,#define

3、OS_TICKS_PER_SEC 200 /*设置每秒之内的时钟节拍数目*/,#define OS_SEM_EN 1 /*是否允许使用信号量功能*/,#define OS_MAX_EVENTS 5 /*最多可以有5个事件*/,#define OS_LOWEST_PRIO 7 /*任务优先级不可以大于7*/,操作系统配置,OSSemCreate() :建立并初始化一个信号量,本实验中所用到的C/OS-II相关函数,OSSemPend() :申请信号量,OSSemPost() :释放信号量,OSTimeDly():将一个任务延时若干个时钟节拍,OSTaskCreateExt () : 创建一个任务

4、,、创建起始任务TaskStart,OSTaskCreateExt(TaskStart, (void *)0, &TaskStartStkTASK_STK_SIZE - 1, TASK_START_PRIO, TASK_START_ID, &TaskStartStk0, TASK_STK_SIZE, &TaskUserDataTASK_START_ID, 0);,源程序说明,TaskStart负责:,安装时钟中断服务例程ucos_x86_idt_set_handler(0x20,(void *)OSTickISR,0x8e00);初始化操作系统时钟ucos_timer_init();创建信号量

5、forki = OSSemCreate(1);创建应用任务TaskStartCreateTasks();,源程序说明,2、创建应用任务Task0, ,Task4,for (i = 0; i N_TASKS; i+) TaskDatai = i; OSTaskCreate(Task, (void *)&TaskDatai, &TaskStkiTASK_STK_SIZE - 1, i+1); ,3、应用任务,源程序说明,void Task (void *pdata) for (;) /* 无限循环 */ TASK_Thinking_To_Hungry(i); OSSemPend(forki, 0, &err); OSSemPend(forkj, 0, &err); /* Acquire semaphores to eat */ TASK_Eat(i); OSSemPost(forkj); OSSemPost(forki); /* Release semaphore */ OSTimeDly(200); /* Delay 100 clock tick */ ,源程序说明,输出信息,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号