资源描述:
《嵌入式实时操作系统 (2).doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一.实验原理:掌握在基于嵌入式实时操作系统μC/OS-II的应用中,任务使用信号量的一般原理。通过哲学家问题实验,了解如何利用信号量来对共享资源进行互斥访问。二.实验平台:PC、XP操作系统、ADS集成开发环境三.实验目的复习对进程同步的机制,并加强学生动手能力,不仅让学生从原理上懂得操作系统,而且让学生实践,让学生自己动手写操作系统部分代码。四:实验内容:哲学家动作:thinkinghungryeatingph1thinking!ph2thinking!……….ph1hungry!ph2hungry!……….ph1eating!ph2eating!………..实现:while(1){
2、显示phxthinking;OSTimeDly()随机延时;显示phxhungry;OSTimeDly()随机延时;显示phxeating;OSTimeDly()随机延时;}五:实验要求:能在屏幕上输出5个哲学家的动作,分别是thinking,hungry,eating,如下所示:哲学家1thinking,哲学家2thinking,...哲学家1hungry,哲学家2hungry,...哲学家1eating,哲学家2eating,...六:实验代码:在ADS1.2中先后导入一下文件最后编写主函数main的程序,代码如下:#include"../ucos-ii/includes.h"/
3、*uC/OSinterface*/#include"string.h"#include"gui.h"//taskstacksize#ifdefSEMIHOSTED#defineTASK_STACK_SIZE(64+SEMIHOSTED_STACK_NEEDS)#else#defineTASK_STACK_SIZE10*1024#endif///***********definetask************************/#defineTASK_PRIO2#defineTASK_STK_SIZE512INT8U*err;//用于退出的键OS_EVENT*SEM[5];//
4、定义对应的信号量指针数组externcharkeyflag;OS_STKMyTaskStk1[TASK_STK_SIZE];//定义任务堆栈区OS_STKMyTaskStk2[TASK_STK_SIZE];OS_STKMyTaskStk3[TASK_STK_SIZE];OS_STKMyTaskStk4[TASK_STK_SIZE];OS_STKMyTaskStk5[TASK_STK_SIZE];voidMytask1(void*pd){charbuf[128];while(1){sprintf(buf,"ph%disthinking",(unsignedint)pd+1);arm
5、ulPrintf(buf);OSSemPend(SEM[0],0,err);//请求一个信号量,没有时间限制sprintf(buf,"ph%dishungry",(unsignedint)pd+1);armulPrintf(buf);OSSemPost(SEM[1]);//发送一个信号量OSSemPend(SEM[0],0,err);//请求一个信号量,没有时间限制sprintf(buf,"ph%diseating",(unsignedint)pd+1);armulPrintf(buf);OSSemPost(SEM[1]);//发送一个信号量OSTimeDlyHMSM(0,0
6、,0,200);//等待200ms}}voidMytask2(void*pd){charbuf[128];while(1){sprintf(buf,"ph%disthinking",(unsignedint)pd+1);armulPrintf(buf);OSSemPend(SEM[1],0,err);//请求一个信号量,没有时间限制sprintf(buf,"ph%dishungry",(unsignedint)pd+1);armulPrintf(buf);OSSemPost(SEM[2]);//发送一个信号量OSSemPend(SEM[1],0,err);//请求一个信号量,
7、没有时间限制sprintf(buf,"ph%diseating",(unsignedint)pd+1);armulPrintf(buf);OSSemPost(SEM[2]);//发送一个信号量OSTimeDlyHMSM(0,0,0,200);//等待200ms}}voidMytask3(void*pd){charbuf[128];while(1){sprintf(buf,"ph%disthinking",(unsignedint)pd+1);arm