实验七 uCOS的信号量

2018-12-02 15:05

实验七uCOS-II的信号量

一:实验目的:

1.掌握uCOS-II中的信号量的使用,实现共享资源的使用。

二:实验内容:

完成课本5-2的实验,观察结果,了解互斥信号量的使用。

uCOSII使用信号量、邮箱和消息队列这些中间环节来实现任务之间的通信。

信号量是一类事件。使用信号量的最初目的是为了给共享资源设立一个标志,该标志表示该共享资源被占用情况。

三:程序代码:

#include \

#define TASK_STK_SIZE 512 OS_STK MyTaskStk[TASK_STK_SIZE]; OS_STK YouTaskStk[TASK_STK_SIZE]; INT16S key; INT8U y1=0,y2=0; BOOLEAN ac_key; char* s;

voidMyTask(void *data); voidYouTask(void *data);

/*********************主函数***************************/ void main(void) {

OSInit(); ac_key=1;

PC_DOSSaveReturn();

PC_VectSet(uCOS,OSCtxSw); OSTaskCreate(MyTask, (void*)0, &MyTaskStk[TASK_STK_SIZE-1], 0);

OSStart(); }

/********************任务MyTask************************/ voidMyTask(void *pdata)

{

#if OS_CRITICAL_METHOD == 3 OS_CPU_SR cpu_sr; #endif

INT8U err; pdata = pdata;

OS_ENTER_CRITICAL();

PC_VectSet(0x08,OSTickISR);

PC_SetTickRate(OS_TICKS_PER_SEC); OS_EXIT_CRITICAL(); OSStatInit();

OSTaskCreate(YouTask, (void *)0, &YouTaskStk[TASK_STK_SIZE-1], 2); for(;;) { if(ac_key) { ac_key=FALSE; // s=\ PC_DispStr(5,++y1, s, DISP_BGND_BLACK+DISP_FGND_WHITE); ac_key=TRUE; }

//如果按下ESC键,则退出uCOS-II if(PC_GetKey(&key)==TRUE) { if(key==0x1B) { PC_DOSReturn(); } } OSTimeDly(20); } }

/***************************************************************************/

voidYouTask(void * pdata) {

#if OS_CRITICAL_METHOD==3 OS_CPU_SR cpu_sr; #endif

INT8U err; pdata = pdata; for(;;) { if(ac_key) { ac_key=FALSE; s=\ PC_DispStr(28,++y2, s, DISP_BGND_BLACK+DISP_FGND_WHITE); OSTimeSet(0); while(OSTime<500) { PC_DispStr(55,y2, s, DISP_BGND_BLACK+DISP_FGND_WHITE); } ac_key=TRUE; }

OSTimeDly(10); } }

实验分析:程序在运行时,首先运行任务MyTask,输出字符串:MyTask。然后MyTask等待20个节拍,运行YouTask,输出字符串:YouTask。MyTask等待时间到了,但是由于信号量无效,所以尽管优先级高,但是也是继续运行YouTask,输出字符串:YouTask。直到信号量有效时,运行MyTask。如此循环执行,直到按键ESC,退出uCOS-II.

四:实验结果:


实验七 uCOS的信号量.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:全国自考幼儿园组织与管理试题带答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: