网站大量收购闲置独家精品文档,联系QQ:2885784924

嵌入式第四章总结.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

4.任务的同步与通信

同步:多个任务共同协作完成一件事情,其间存在的直接制约关系叫做任务同步。任务同步的主要工作就是对多个相关任务在执行次序上进行调协调,以使并发执行的猪任务之间能有效的共享资源和相互合作,从而使程序的执行具有可再现性。

任务间单向同步的过程:一个任务进行I/O操作并等待信号回应,当I/O操作完成时,中断服务程序或另一个任务发出信号,该任务得到信号后继续往下执行。

任务之间双向同步的过程:运行到某处的第一个任务发信号给第二个任务,然后等待信号返回,通用地,当第二个任务运行到某处时,发信号给第一个任务并等待返回信号。

互斥:每个进程在进入临界区之前,应先对要访问的临界资源进行检查,看他是否正在被访问,如果此刻该临界资源未被访问,进程便可进入临界区,对该资源进行访问,并设置它正在被访问的标志,如果此刻该临界资源正在被某个其他进程访问,则本进程不能进入临界区,这就是任务之间互斥的概念。

通信:任务之间任务与中断服务程序之间仅有同步是不够的,他们之间还需要通信,所谓任务之间的通信是指任务之间或者任务与中断服务程序之间的信息交互。在μC/OSⅡ中,这通过事件控制块及其操作实现。

事件:任务间通信所使用的信息载体,统称为事件,主要有信号量、互斥型信号量、消息邮箱、消息队列等。即用于通讯的数据结构叫做事件控制块

对事件控制块进行的一些通用操作如下所述:

OS_EventWaitListInit():初始化一个事件控制块

OS_EventTaskRdy():使一个任务进入就绪状态

OS_EventWait():使一个任务进入事件的等待队列

OS_EventTO():因为等待超时而使一个任务进入就绪状态

ECB初始化:1.建立空闲事件控制链表2.获取一个空闲的事件控制块链表3.初始化事件控制块的任务等待队列

将一个任务挂载到就绪队列

将一个任务加入时间的等待队列

使等待超时的任务进入就绪状态

信号量机制

μC/OSⅡ中的信号量由两部分组成,一部分是信号量的计数值,(它是一个16位的无符号整数),另一部分是由等待该信号量的任务组成的等任务等待队列。

用于同步的信号量,其初始值在信号量创建石质为0,表明所同步的事件尚未发生用于互斥的信号量初始值为1,表明当前没有任务获取该信号量,而用于资源管理的计数信号量,其初始值为N表明需要管理的最大资源数为N

创建信号量:OS_EVENT*OSSemCreate(INT16Ucnt)

删除信号量:OS_EVENT*OSSemDel(OS_EVENT*pevent,INT8Uopt,INT8U*err)

获取信号量:OS_EVENT*OSSemPend(OS_EVENT*pevent,INT16Utimeout,INT8U*err)

释放信号量:INT8UOSSemPost(OS_EVENT*pevent)

无等待请求一个信号量:INT16UOSSemAccept(OS_EVENT*pevent)

查询信号量当前状态:INT8UOSSemQuery(OS_EVENT*pevent,OS_SEM_DATA*p_sem_data)

重置信号量的值:voidOAAemSet(OS_EVENTpevent,INT16Ucnt,INT8U*err)

使用互斥信号量可能会出现的问题:

1、死锁问题:当系统中的多个任务共享系统资源,而共享资源的数量不足以满足各任务的需要时,会引起各任务对资源的竞争而产生死锁。通常使用互斥信号量来完成对共享资源的互斥访问,但如果使用不当仍然会发生死锁。

2、优先级反转问题:当有多个任务需要使用共享资源时,可能会出现高优先级任务被低优先级任务阻塞,并等待低优先级任务执行的现象。高优先级任务需要等待低优先级任务释放共享资源,而低优先级任务又在等待中等优先级任务的现象被称为优先级反转

互斥锁

互斥所也叫做互斥型信号量任务,可以用互斥型信号量实现对共享资源的独占式处理。互斥型信号量也称为mutex,可以在应用程序代码中用于解决优先级问题。

μC/OSⅡ的互斥型信号量由三个元素组成:标志,优先级,任务列表

注意:中断服务程序不可调动互斥锁

创建互斥锁:OS_EVENT*OSMutexCreate(INT8Uprio,INT8U*err)

删除互斥锁:OS_EVENT*OSMutexDel(OS_EVENT*pevent,INT8Uopt,INT8U*err)(opt:删除互斥锁方式)

等待获取互斥锁:voidOSMutexPend(OS_EVENT*pevent,INT16Utimeout,INT8U*err)(timeout:最大等待时间)

文档评论(0)

手可摘星陈 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档