基于uCOS-II的时钟设计实验报告_第1页
基于uCOS-II的时钟设计实验报告_第2页
基于uCOS-II的时钟设计实验报告_第3页
基于uCOS-II的时钟设计实验报告_第4页
基于uCOS-II的时钟设计实验报告_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式系统综合实验报告实验内容基于uC/OS-II的时钟设计系自动控制专 业自动化班 级学 号学生姓名指导教师2011年05月25日基于uC/OS-II的时钟设计一 实验要求1. 按正常逻辑显示“年-月-日”,“时:分:秒”,其中分与秒间“:”每0.5秒闪烁1次。2. 可利用键盘的上,下,左,右键进行日期,时间设置;按“ESC”退出程序;3. 可利用键盘的上,下键进行走时快慢调整,以便检验走时逻辑可选功能;4. 功能的实现过程中,必须体现所学的uC/OS-II相关知识,信号量、互斥量、消息邮箱、消息队列必须用到;5. 独立完成,正常演示结果,且正确回答老师抽查问题。二 实验设计思想1、划分了6

2、个任务,分别为year、month、day、hour、min、sec,建立了2个信号量semsec、semhalfsec。2、dis1Num(char x, char y, char num)表示在界面(x,y)坐标上显示一位数,dis2Num(char x, char y, char num)表示两位数组成一个时间块。3、用方向键定义了4个key,left、right可以进行年月日时分秒的切换,up、down可以对每一项的数值的加减。4、每过一个信号量semsec,时间加1秒,OSSemPend(semHalfSec, 0, &err)调用semhalfsec实现两个点亮半秒、暗半秒的闪烁功

3、能。OSMboxPost(mboxPosNumMode, &dateTime)调用semhalfsec实现被选中的任务时间块的闪烁。5、通过key实现任务之间的调度,left和right方向键对时间块的选择用到了互斥量。6、OSMboxPost(mboxPosNumMode, &dateTime)把dateTime的地址发送给mboxPosNumMode。7、。“消息队列”是在消息的传输过程中保存消息的容器。三 具体程序实现实验结果代码/* uC/OS-II* The Real-Time Kernel* description:移植uC/OS-II(2.51 Kernal)在Visual C+

4、 Complier运行。* date:2006.10.19* change by:HCF* 版本历史* 10_19:1.0版本-* 目前发现的问题:*任务堆栈只能设置成2048(OS_STK)大小-*/#include includes.h#include stdlib.h/* CONSTANTS*/#define TASK_STK_SIZE 2048/任务堆栈长度,只能设置为2048!/* 必须定义以下任务堆栈空间使用,作为创建优先级别为0的TaskStart()任务的任务堆栈*/OS_STK TASKSTARTSTK10*TASK_STK_SIZE;/TaskStart的任务堆栈空间OS_

5、STK taskTimeTickStkTASK_STK_SIZE;OS_STK taskTimeRefreshStkTASK_STK_SIZE;OS_STK taskShow2DotStkTASK_STK_SIZE;OS_STK taskDispDateTimeStkTASK_STK_SIZE;OS_STK taskdispDateTimeOptStkTASK_STK_SIZE;OS_STK taskKeyDealStkTASK_STK_SIZE;INT8U x=0,y=0;/字符显示位置char dateTime7=11,5,18,10,30,12,0;HANDLE mainhandle;/

6、 主线程句柄CONTEXT Context;/ 主线程切换上下文BOOLEAN FlagEn = 1;/ 增加一个全局变量,做为是否时钟调度的标志OS_EVENT*semSec;OS_EVENT*semHalfSec;OS_EVENT*mutexDis;OS_EVENT*mboxDateTime;OS_EVENT*mboxPosNumMode;OS_EVENT*qKey;void*keyQTbl110;/* FUNCTION PROTOTYPES*/voidVCInit(void);/ 初始化相关变量,一定需要voidTaskStart( void * pParam );void taskSh

7、ow2Dot(void *pdata);void taskTimeTick(void *pdata);void taskTimeRefresh(void *pdata);void taskDispDateTime(void *pdata);void taskdispDateTimeOpt(void *pdata);void taskKeyDeal(void *pdata);/*函 数 名:main(int argc, char *argv)*函数功能:*入口参数:*返回参数:*/void main(int argc, char *argv)VCInit(); /初始化一些变量,编译器相关OSI

8、nit();/初始化uCOS_II/必须创建以下这个任务,作为设置uCOS_II时钟频率使用,与MyTask()中的这两行代码等效OSTaskCreate(TaskStart,0, &TASKSTARTSTK10*TASK_STK_SIZE - 1, 0 );/ 必须使用OSStart();/启动uCOS_II的多任务管理/*函 数 名:VCInit()*函数功能:编译器初始化,VC环境下一定需要*入口参数:无*返回参数:无*/void VCInit(void)HANDLE cp,ct;Context.ContextFlags = CONTEXT_CONTROL;cp = GetCurrent

9、Process();/得到当前进程句柄ct = GetCurrentThread();/得到当前线程伪句柄DuplicateHandle(cp, ct, cp, &mainhandle, 0, TRUE, 2);/伪句柄转换,得到线程真句柄/*函 数 名:Task_start( )*函数功能:启动统计任务(只创建,不做参与任务调度),该任务创建,作为设置uCOS_II时钟频率使用,*与MyTask()中的这两行代码等效:*PC_VectSet(0x08, OSTickISR);/安装uCOS_II时钟中断向量*PC_SetTickRate(OS_TICKS_PER_SEC);/设置uCOS_I

10、I时钟频率*入口参数:*返回参数:无*/void TaskStart( void * pParam )INT16S key;/用于退出uCOS_II的键char key8;timeSetEvent(1000/OS_TICKS_PER_SEC, 0, OSTickISR, 0, TIME_PERIODIC);/开启一个定时器线程,感觉10 ticks/s比较好OSStatInit();semSec = OSSemCreate(0);semHalfSec = OSSemCreate(0);mboxDateTime = OSMboxCreate(0);mboxPosNumMode = OSMboxC

11、reate(0);qKey = OSQCreate(keyQTbl, 100);OSTaskCreate(taskTimeTick,0,&taskTimeTickStkTASK_STK_SIZE - 1,20); /使任务MyTask的优先级别为1OSTaskCreate(taskKeyDeal,0,&taskKeyDealStkTASK_STK_SIZE - 1,21);OSTaskCreate(taskdispDateTimeOpt,0,&taskdispDateTimeOptStkTASK_STK_SIZE - 1,22);OSTaskCreate(taskShow2Dot,0,&tas

12、kShow2DotStkTASK_STK_SIZE - 1,30);/使任务MyTask的优先级别为1OSTaskCreate(taskTimeRefresh,0,&taskTimeRefreshStkTASK_STK_SIZE - 1,40);/使任务MyTask的优先级别为0OSTaskCreate(taskDispDateTime,0,&taskDispDateTimeStkTASK_STK_SIZE - 1,50);/使任务MyTask的优先级别为0/使任务MyTask的优先级别为0while(1)/sleep ,wait for sem1,run other taskOSTimeDl

13、yHMSM(0,0,0,500);if (PC_GetKey(&key) = TRUE)if (key = 0x1B)/如果按下Esc键则退出uCOS_IIexit(0);elsekey8 = (char)key;OSQPost(qKey, (void*)&key8);key = 0;/*/void dis1Num(char x, char y, char num)char hor,ver;/OS_ENTER_CRITICAL();switch(num)case 0:hor = y;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);

14、hor = y+1;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+2;ver = x;PC_DispStr(ver, hor, MM MM, DISP_FGND_WHITE);hor = y+3;ver = x;PC_DispStr(ver, hor, MM MM, DISP_FGND_WHITE);hor = y+4;ver = x;PC_DispStr(ver, hor, MM MM, DISP_FGND_WHITE);hor = y+5;ver = x;PC_DispStr(ver, hor, MM MM,

15、 DISP_FGND_WHITE);hor = y+6;ver = x;PC_DispStr(ver, hor, MM MM, DISP_FGND_WHITE);hor = y+7;ver = x;PC_DispStr(ver, hor, MM MM, DISP_FGND_WHITE);hor = y+8;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+9;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);break;case 1:hor = y;ver

16、 = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+1;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+2;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+3;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+4;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+5;ver

17、 = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+6;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+7;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+8;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+9;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);break;case 2:

18、hor = y;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+1;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+2;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+3;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+4;ver = x;PC_DispStr(ver, hor, MMMMMMMM, D

19、ISP_FGND_WHITE);hor = y+5;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+6;ver = x;PC_DispStr(ver, hor, MM , DISP_FGND_WHITE);hor = y+7;ver = x;PC_DispStr(ver, hor, MM , DISP_FGND_WHITE);hor = y+8;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+9;ver = x;PC_DispStr(v

20、er, hor, MMMMMMMM, DISP_FGND_WHITE);break;case 3:hor = y;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+1;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+2;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+3;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);h

21、or = y+4;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+5;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+6;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+7;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+8;ver = x;PC_DispStr(ver, hor, MMMMMMMM,

22、DISP_FGND_WHITE);hor = y+9;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);break;case 4:hor = y;ver = x;PC_DispStr(ver, hor, MM MM, DISP_FGND_WHITE);hor = y+1;ver = x;PC_DispStr(ver, hor, MM MM, DISP_FGND_WHITE);hor = y+2;ver = x;PC_DispStr(ver, hor, MM MM, DISP_FGND_WHITE);hor = y+3;ver = x

23、;PC_DispStr(ver, hor, MM MM, DISP_FGND_WHITE);hor = y+4;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+5;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+6;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+7;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);ho

24、r = y+8;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+9;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);break;case 5:hor = y;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+1;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+2;ver = x;PC_DispStr(ver, hor,

25、MM , DISP_FGND_WHITE);hor = y+3;ver = x;PC_DispStr(ver, hor, MM , DISP_FGND_WHITE);hor = y+4;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+5;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+6;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+7;ver = x;PC_Disp

26、Str(ver, hor, MM, DISP_FGND_WHITE);hor = y+8;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+9;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);break;case 6:hor = y;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+1;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FG

27、ND_WHITE);hor = y+2;ver = x;PC_DispStr(ver, hor, MM , DISP_FGND_WHITE);hor = y+3;ver = x;PC_DispStr(ver, hor, MM , DISP_FGND_WHITE);hor = y+4;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+5;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+6;ver = x;PC_DispStr(ver, ho

28、r, MM MM, DISP_FGND_WHITE);hor = y+7;ver = x;PC_DispStr(ver, hor, MM MM, DISP_FGND_WHITE);hor = y+8;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+9;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);break;case 7:hor = y;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);h

29、or = y+1;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+2;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+3;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+4;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+5;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WH

30、ITE);hor = y+6;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+7;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+8;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+9;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);break;case 8:hor = y;ver = x;PC_DispStr(ver, hor, MMMMM

31、MMM, DISP_FGND_WHITE);hor = y+1;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+2;ver = x;PC_DispStr(ver, hor, MM MM, DISP_FGND_WHITE);hor = y+3;ver = x;PC_DispStr(ver, hor, MM MM, DISP_FGND_WHITE);hor = y+4;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+5;ver = x;PC

32、_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+6;ver = x;PC_DispStr(ver, hor, MM MM, DISP_FGND_WHITE);hor = y+7;ver = x;PC_DispStr(ver, hor, MM MM, DISP_FGND_WHITE);hor = y+8;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+9;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHI

33、TE);break;case 9:hor = y;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+1;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+2;ver = x;PC_DispStr(ver, hor, MM MM, DISP_FGND_WHITE);hor = y+3;ver = x;PC_DispStr(ver, hor, MM MM, DISP_FGND_WHITE);hor = y+4;ver = x;PC_DispSt

34、r(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+5;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+6;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+7;ver = x;PC_DispStr(ver, hor, MM, DISP_FGND_WHITE);hor = y+8;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);hor = y+9

35、;ver = x;PC_DispStr(ver, hor, MMMMMMMM, DISP_FGND_WHITE);break;default:hor = y;ver = x;PC_DispStr(ver, hor, , DISP_FGND_WHITE);hor = y+1;ver = x;PC_DispStr(ver, hor, , DISP_FGND_WHITE);hor = y+2;ver = x;PC_DispStr(ver, hor, , DISP_FGND_WHITE);hor = y+3;ver = x;PC_DispStr(ver, hor, , DISP_FGND_WHITE)

36、;hor = y+4;ver = x;PC_DispStr(ver, hor, , DISP_FGND_WHITE);hor = y+5;ver = x;PC_DispStr(ver, hor, , DISP_FGND_WHITE);hor = y+6;ver = x;PC_DispStr(ver, hor, , DISP_FGND_WHITE);hor = y+7;ver = x;PC_DispStr(ver, hor, , DISP_FGND_WHITE);hor = y+8;ver = x;PC_DispStr(ver, hor, , DISP_FGND_WHITE);hor = y+9;ver = x;PC_DispStr(ver, hor, , DISP_FGND_WHITE);break;/OS_EXIT_CRITICAL();void dis2Num(char x, char y, char num)char hor,ver;/*if(num = )hor = y;ver = x;dis1Num(ver, hor, 11);hor = y;ver = x+14;dis1Num(ver, hor, 11);else*/hor = y;ver = x;dis1Num(ver, hor

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论