Ucos多任务演示实验.docx_第1页
Ucos多任务演示实验.docx_第2页
Ucos多任务演示实验.docx_第3页
Ucos多任务演示实验.docx_第4页
Ucos多任务演示实验.docx_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

uCOS多任务演示实验一、 实验目的 (1)、理解任务,任务调度的概念 (2)、理解任务通信的几种方式(管道、共享内存、消息、队列、邮箱、套接字等) (3)、理解任务同步的几种方式(信号量、互斥、忙等待、事件、临界区等) (4)、掌握LPC2200(for MagicARM2200)专用工程模板的使用; (5)、能够在MagicARM2200-S 上运行基于C/OS-II 操作系统的程序; (6)、掌握基于C/OS-II 操作系统的用户程序的编写格式。二、实验内容及要求建立三个或三个以上的C/OS-II的任务,一个任务用于检测KEY1按键输入,称之为按键检测任务,另一个任务用于控制蜂鸣器,就称之为蜂鸣器控制任务。还有LED灯任务和电机任务。要求各个任务之间不是独立的,而是有相互关联的,达到多任务间的数据通信和同步的实验要求。三、实验设备及软件硬件:PC机一台MagicARM2200-S教学实验开发平台一套软件:Windows98/XP/2000系统,ADS1.2集成开发环境C/OS-II操作系统(V2.52)四、设计方案(一)方案原理1、信号量与邮箱(1)要完成两个任务之间的单向同步,需要通过邮箱或者信号量来实现。用信号量进行单向同步,以一个事情触发两个以上任务时,按键任务划分原则可以将他们合并为一个任务。如果这些任务因为其他原因不能合并(不同的功能部件),则可以采用有消息分发功能的通信机制邮箱,以减少通信工具的个数。(2)且用信号量进行行为同步时,只能提供同步的时刻信息,不能提供内容信息,当控制方在对被控制方进行控制,且还需要向被控制方提供内容信息(数据或字符串)时,消息邮箱是一种有效的方案。(3)当两个任务是系统“信息链条”中的相邻两个环节时,前一个任务的输出信息就是后一个任务的输入信息,消息邮箱就是连接这两个任务的桥梁。在消息邮箱看来,提供消息的任务(或ISR)是生产者,读取消息的任务是消费者,正常情况下,消息的消费时间比生产时间短,消费者总是在等待消息的到来,这时,生产者每向“消息邮箱”发送一次“消息”,就立即被消费者取走,两者达到理想的同步效果。(4)由于“消息邮箱”里只能存放一条消息,所以在用消息邮箱进行同步控制时,必须满足一个前提:任何时候消息的产生速度都比消息的消费速度慢,即被控制任务总是在等待消息。2、关于优先级如果单向同步发生在两个任务之间,那么实际同步效果与两个任务的优先级有很大关系,当控制方任务的优先级低于被控制方任务的优先级时,控制方任务发出信息后使被控制方任务进入就绪状态,瞬时同步效果较好,当控制方任务的优先级高于被控制方任务的优先级时,控制方任务发出信息后使被控制方任务进入就绪状态,但并不发声切换,只有当控制方再次调用系统服务函数(如延时函数)并使自己挂起时,被控制方任务才会有运行机会,瞬时同步效果较差,当被控制方任务的实时性要求不高,或者采取有缓冲功能的通行手段时,这是可以接受的。常用做法是采用首尾触发方式(控制方任务的尾部触发被控制方的首部),控制方在发出信息后立即调用延时函数(延时时间大于被控制方任务的处理时间),主动使自己挂起来,让低优先级的控制方任务尽快得到运行机会,从而改善同步效果。(二)方案设计1、LED流水灯闪烁方式:UCOS_LED42=0xff,0x00,0x33,0xcc,0x55,0x33,0xcc,0xaa,0x03,0x06,0x0c,0x18,0x30,0x60,0xc0,0x00,0xc0,0x60,0x30,0x18,0x0c,0x06,0x03,0x00,0x81,0xc3,0xe7,0xff,0xe7,0xc3,0x81,0x00,0xff,0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0xff,0x00;2、蜂鸣器鸣叫方式:蜂鸣器相当于一个警报提醒,提醒当前进程为等待按键状态,鸣叫方式为持续鸣叫,持续时间为3秒。另外由于LED任务执行完一次需要的时间是21秒,因此在蜂鸣器任务开始加上一个21秒的延时,以实现LED任务与蜂鸣器任务的却换。3、按键的功能:当按键按下时,邮箱开始发送信息给LED任务和蜂鸣器任务。LED任务为最低优先级任务,按键为中优先级任务,蜂鸣器为最高优先级任务,由于优先级的关系,按键先给蜂鸣器任务发送消息,按键任务执行完后,再给LED任务发送消息,但事实上发送消息和按键任务完成是个短暂的过程,因此先后顺序不明显。4、切换方式:三个任务的切换和执行流程如下:五、部分主要代码#includeconfig.h#includestdlib.h#defineKEY(120)/P0.20为按键的控制I/O#defineBEEP(17)/P0.7为蜂鸣器的控制I/O/LED控制宏函数定义。LED1-LED8的控制I/O为P1.16-P1.23#defineLED_ADJ16#defineLED_IOCON(0xFFLED_ADJ)#defineLED_OFF()IO1SET=LED_IOCON#defineLED_DISP(dat)LED_OFF();IO1CLR=(dat)LED_ADJ)蜂鸣器鸣叫开始按键等待(按键按下?)执行LED任务LED任务结束YesNo#defineTaskStkLengh100/定义用户任务堆栈长度OS_STKTaskStkledTaskStkLengh;/定义用户任务led的堆栈OS_STKTaskStkbeepTaskStkLengh;/定义用户任务beep的堆栈OS_STKTaskStkkeyTaskStkLengh;/定义用户任务key的堆栈OS_EVENT*Mybox;/定义邮箱指针voidTaskled(void*pdata);/声明TaskledvoidTaskbeep(void*pdata);/声明TaskbeepvoidTaskkey(void*pdata);/声明Taskkey/*主函数*/intmain(void)/将main()函数设置为整型为了防止编码警告OSInit();/创建显示任务,进入低优先级任务OSTaskCreate(Taskled,(void*)0,&TaskStkledTaskStkLengh-1,5);OSStart();return0;/*Taskled任务*/voidTaskled(void*pdata)/显示任务(低优先级)constuint8DISP_TAB42=0xff,0x00,0x33,0xcc,0x55,0x33,0xcc,0xaa,0x03,0x06,0x0c,0x18,0x30,0x60,0xc0,0x00,0xc0,0x60,0x30,0x18,0x0c,0x06,0x03,0x00,0x81,0xc3,0xe7,0xff,0xe7,0xc3,0x81,0x00,0xff,0x7e,0x3c,0x18,0x00,0x18,0x3c,0x7e,0xff,0x00;INT8Uerr,i;pdata=pdata;/防止编译警告TargetInit();/初始化系统硬件PINSEL0=0x00000000;/设置P0口管脚连接GPIOIO0DIR=BEEP;/设置蜂鸣器控制口为输出六、测试结果执行程序后,蜂鸣器鸣叫并延时3秒,进入等

温馨提示

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

最新文档

评论

0/150

提交评论