uCOS-II任务间通讯和同步实验.ppt

上传人:小飞机 文档编号:5451404 上传时间:2023-07-08 格式:PPT 页数:14 大小:501KB
返回 下载 相关 举报
uCOS-II任务间通讯和同步实验.ppt_第1页
第1页 / 共14页
uCOS-II任务间通讯和同步实验.ppt_第2页
第2页 / 共14页
uCOS-II任务间通讯和同步实验.ppt_第3页
第3页 / 共14页
uCOS-II任务间通讯和同步实验.ppt_第4页
第4页 / 共14页
uCOS-II任务间通讯和同步实验.ppt_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《uCOS-II任务间通讯和同步实验.ppt》由会员分享,可在线阅读,更多相关《uCOS-II任务间通讯和同步实验.ppt(14页珍藏版)》请在三一办公上搜索。

1、JX44B0实验系统教案uC/OS-II任务间通讯和同步实验,武汉创维特信息技术有限公司,2023/7/8,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中使用信号量,通过调用OSSemCre

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

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

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

6、函数等待一个邮箱中的消息,如果邮箱中没有可用的消息,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(),清空消息队列函数OSQFlush()和查询消息队列函数OSQQuery()。,13,六 实验过程,实验过程,14,六 实验报告要求,实验报告要求,简述邮箱和信号量的作用?简述邮箱和信号量的在ucOS中的是如何实现的?,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号