uCOS-II任务间通讯和同步实验_第1页
uCOS-II任务间通讯和同步实验_第2页
uCOS-II任务间通讯和同步实验_第3页
uCOS-II任务间通讯和同步实验_第4页
uCOS-II任务间通讯和同步实验_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、JX44B0实验系统教案uC/OS-II任务间通讯和同步实验,武汉创维特信息技术有限公司,2020/7/23,2,提纲,1,3,2,4,5,基础知识,实验目的,实验内容,预备知识,实验设备,6,实验过程,7,实验报告要求,3,一 实验目的,实验目的,掌握uC/OS-II操作系统下使用信号量解决任务之间的同步问题 掌握uC/OS-II操作系统下任务间通讯的方法,4,二 实验内容,实验内容,使用信号量实现任务间同步 使用邮箱实现任务之间的通讯,5,三 预备知识,预备知识,了解操作系统任务调度的机制 了解操作系统任务间通讯的机制 学习uC/OS-II操作系统下多任务应用程序的编写方法,6,四 实验设

2、备,实验设备,JX44B0教学实验箱 ADT1000仿真器和ADT IDE集成开发环境 串口连接线,7,五 基础知识,uC/OS-II任务之间的通讯与同步方式,在C/OS-II中,有多种方法可以保护任务之间的共享数据和提供任务之间的通讯。 利用宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()来关闭中断和打开中断。当两个任务或者一个任务和一个中断服务子程序共享某些数据时,可以采用这种方法 利用函数OSSchedLock()和OSSchekUnlock()对C/OS-II中的任务调度函数上锁和开锁 信号量 邮箱 队列,8,五 基础知识,uC/OS-II中使用信号量,通

3、过调用OSSemCreate()建立信号量,并对信号量的初始计数值赋值。该初始值为0到65,535之间的一个数。如果信号量是用来表示一个或者多个事件的发生,那么该信号量的初始值应设为0。如果信号量是用于对共享资源的访问,那么该信号量的初始值应设为1(例如,把它当作二值信号量使用)。 通过调用OSSemPost()函数发送一个信号量,通过调用OSSemPend()函数等待一个信号量。如果信号量当前是可用的(信号量的计数值大于0),将信号量的计数值减1,然后函数将“无错”错误代码返回给它的调用函数。如果信号量的计数值为0,而OSSemPend()函数又不是由中断服务子程序调用的,则调用OSSemP

4、end()函数的任务要进入睡眠状态,等待另一个任务(或者中断服务子程序)发出该信号量。,9,五 基础知识,uC/OS-II中使用信号量进行任务之间同步,右边的代码使用两个信号量实现了两个任务之间的同步。信号量创建的代码如下,信号量Sem2初始为可用状态,而信号量Sem1初始为不可用状态。 Sem1 = OSSemCreate(0); Sem2 = OSSemCreate(1); 任务TaskLED必须等待Sem2可用才能够继续往下运行,而Sem2在TaskSEG中发送。同样TaskSEG必须等待Sem1可用才能够继续往下运行,而Sem1在TaskLED中发送,这样就实现了程序中“”之间代码的顺

5、序执行,而不受OSTimeDly的延时值的影响。,10,五 基础知识,uC/OS-II中使用邮箱,邮箱可使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量。该指针指向一个包含了特定“消息”的数据结构。通过调用OSMboxCreate()函数来创建邮箱,并指定指针的初始值。如果使用邮箱的目的是用来通知一个事件的发生(发送一条消息),那么就要初始化该邮箱为NULL,因为在开始时,事件还没有发生。如果用户用邮箱来共享某些资源,那么就要初始化该邮箱为一个非NULL的指针。在这种情况下,邮箱被当成一个二值信号量使用。使用邮箱同样可以实现任务间的同步。 通过OSMboxPost()函数发送一个消

6、息到邮箱中,通过OSMboxPend()函数等待一个邮箱中的消息,如果邮箱中没有可用的消息,OSMboxPend()的调用任务就被挂起,直到邮箱中有了消息或者等待超时。,11,五 基础知识,uC/OS-II中使用邮箱进行任务之间通讯,下面的代码每100个时钟节拍从TaskSEG中发送一个字符串,在TaskLED中接收并打印出来。,12,五 基础知识,uC/OS-II中使用消息队列实现任务之间的通讯,消息队列是uC/OS-II中另一种通讯机制,它可以使一个任务或者中断服务子程序向另一个任务发送以指针方式定义的变量。因具体的应用有所不同,每个指针指向的数据结构变量也有所不同。 uC/OS-II提供了7个对消息队列进行操作的函数:创建消息队列函数OSQCreate(),等待消息队列函数OSQPend(),先进先出(FIFO)发送消息函数OSQPost(),后进先出(LIFO)发送消息函数OSQPostFront(),无等待获取消息函数OSQAccept(),清空消息队列函数

温馨提示

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

评论

0/150

提交评论