嵌入式μCOSII内核实验四(哲学家就餐问题的实现).pptVIP

  • 6
  • 0
  • 约2.43千字
  • 约 13页
  • 2015-08-05 发布于重庆
  • 举报

嵌入式μCOSII内核实验四(哲学家就餐问题的实现).ppt

嵌入式μCOSII内核实验四(哲学家就餐问题的实现).ppt

* * * * * * 电子科技大学嵌入式软件工程中心 内核实验(四) 哲学家就餐问题的实现 实验目的 掌握在基于嵌入式实时操作系统μ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先后执行,显示“thinking” , 然后挂起; 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 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 () : 创建一个任务 1、创建起始任务TaskStart OSTaskCreateExt(TaskStart, (void *)0, TaskStartStk[TASK_STK_SIZE - 1], TASK_START_PRIO, TASK_START_ID, TaskStartStk[0], TASK_STK_SIZE, TaskUserData[TASK_START_ID], 0); 源程序说明 TaskStart负责: 安装时钟中断服务例程 ucos_x86_idt_set_handler(0x20,(void *)OSTickISR,0x8e00); 初始化操作系统时钟 ucos_timer_init(); 创建信号量 fork[i] = OSSemCreate(1); 创建应用任务 TaskStartCreateTasks(); 源程序说明 2、创建应用任务Task0, ……,Task4 for (i = 0; i N_TASKS; i++) { TaskData[i] = i; OSTaskCreate(Task, (void *)TaskData[i], TaskStk[i][TASK_STK_SIZE - 1], i+1); } 3、应用任务 源程序说明 void Task (void *pdata) { …… for (;;) { /* 无限循环 */ TASK_Thinking_To_

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档