ucOSII学习笔记(标志事件组_信号量_邮箱_互斥)

ucOSII学习笔记(标志事件组_信号量_邮箱_互斥)

ID:37904588

大小:141.00 KB

页数:39页

时间:2019-06-02

ucOSII学习笔记(标志事件组_信号量_邮箱_互斥)_第1页
ucOSII学习笔记(标志事件组_信号量_邮箱_互斥)_第2页
ucOSII学习笔记(标志事件组_信号量_邮箱_互斥)_第3页
ucOSII学习笔记(标志事件组_信号量_邮箱_互斥)_第4页
ucOSII学习笔记(标志事件组_信号量_邮箱_互斥)_第5页
资源描述:

《ucOSII学习笔记(标志事件组_信号量_邮箱_互斥)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、目前因项目开发要用到ucOSII,在网上查找到了一些资料,为方便其他同仁,把我个人认为写得很好的文档摘抄到一个文件中,并上传到百度空间,希望对初学都有所帮助。UCOS事件标志组管理笔记Ⅰ说明:本文摘自网上,来源已忘记,望原作者见谅。当某个任务需要与多个任务同步时,须要使用事件标志组。1、弄清楚OS_FLAG_GRP、OS_FLAG_NODE和OS_TCB之间的关系。当一个任务开始等待某些事件标志位时,就回建立一个事件标志节点OS_FLAG_NODE数据结构,并且将任务所要等待的事件标志位写入OS_FLAG_NODE的分量.OSFlagNode

2、Flags。然后将该数据结构分量.OSFlagNodeFLagGrp指向事件标志组OS_FLAG_GRP,将.OSFlagNodeTCB指向该任务的控制块OS_TCB,建立起任务与事件标志组之间的联系,说明该任务是等待该事件标志组中某些事件标志位的任务。当有多个任务都需要等待某个事件标志组中某些事件标志位时,这些任务分别建立自己的事件标志节点。并且将这些事件标志节点通过分量.OSFlagNodeNext和.OSFlagNodePrev连接成链。 ⒉、任务可以等待事件标志组中某些位置位1,也可以等待事件标志组中某些位清0,而置1(或清0)又可以

3、分为所有事件都发生的“与”型和任何一个事件发生的“或”型。这样便有了4种不同的类型存放在.OSFlagNodeWaitType(OS_FLAG_NODE)中。 3、事件标志组和信号量我觉得是有不同的。信号量建立以后,假设初始值为N,前N个任务调用OSSemPend()函数都会得到信号量。之后如果第N+1个任务调用OSSemPend()函数申请信号量,该任务将会被置为等待事件发生的状态(睡眠态)。只到前N个任务中有任务运行完了所要运行的程序,调用OSSenmPost()函数,释放了所占用了信号量,第N+1个任务。(这里假设该任务是所有等待信号量

4、任务中优先级最高的任务)才会获得信号量,被从睡眠态转入就绪态。而事件标志组是事件标志组建立之后,某个任务需要事件标志组中某些事件标志位(置位或者清0)才能继续运行,于是任务调用OSFlagPend()函数,而此时若这些标志位满足要求,任务返回,继续执行。否则,任务将被挂起。而当有另外一个任务调用OSFlagPost()函数将前一个任务所需要的标志位(置位或清0)使之满足要求,前一个被挂起的任务将被置为就绪态。因此几个任务可以同时得到所需要的事件标志进入就绪态。注意:只要任务所需要的标志位满足要求,任务便进入就绪态。与信号量不同,信号量中的任务

5、需要是在等待该信号量中优先级最高的任务才能得到信号量进入就绪态。事件标志组可以一个任务与多个任务同步,而信号量只能是一个任务与另一个任务同步以下所有文档摘自一位网友博客上的,写的很好,转一下:gliethttp.cublog.cnucosii学习(2)事件标志组2010-08-2320:54      FLAG-事件标志组管理,在UCOSII里我个人觉相对比较复杂,首先我们要有个大致的概念,就是FLAG事件组能用来干什么。以下只摘自一位网友博客上的,写的很好,转一下:gliethttp.cublog.cn    (一)描述:对于flag--"

6、事件组"的使用,可以用一个简单的例子做说明:比如,我现在用迅雷下载一部10集的连续剧,我打算10集全部下载完成之后,才开始正式看,现在3~10集因为种子原因,先早下完了,现在第1集下到了82%,第2集下到了97%,因为我的计划是10集全部下完才开始看,而第1集和第2集由于网络,种子等等各种原因,迟迟不能下载完成,进而导致我的计划被悬停,不能进行,已下载的8集,也因为前2集没能下完,而白白等待---这就等同于flag事件组,1~10集,每一集都是一个事件,因为我内定,10个事件全部完成之后,才进入下一事件--"观看"所以及早完成自己事件的第3~

7、10集,将主动把自己通过flag事件组函数OSFlagPost()登记到事件组上,他们不关心,其他友邻事件完成否,只专注自己的事件是否完成,自己的事件一旦完成就登记到事件组上,最后3~10集,都把自己登记上去了,只剩下第1集和第2集,一旦某天的某个时刻,第2集下完了,那么第2集也把自己登记到事件组上,这样整个事件距离完成还剩下一个事件,就是第1集是否下载完成,只要第1集下载完成,那么我内定的"观看"计划开始启动,过了3分钟,由于网速提高,竟以300k的速度开始下载第1集,1分钟之后,第1集也下载完成了,第1集立即调用OSFlagPost事件组

8、函数,将自己登记到事件组上,ok,OSFlagPost()检测到所有事件已经完成,OSFlagPost()将是"我"自动进入下一事件---"观看"还有一点就是关于f

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。