文件名称:事件标志组-倒数粗糙熵图像阈值化分割算法
文件大小:6.12MB
文件格式:PDF
更新时间:2024-06-29 05:03:03
UCOSIII 教程
12.1 事件标志组 有时候一个任务可能需要和多个事件同步,这个时候就需要使用事件标志组。事件标志组 与任务之间有两种同步机制:“或”同步和“与”同步,当任何一个事件发生,任务都被同步的 同步机制是“或”同步;需要所有的事件都发生任务才会被同步的同步机制是“与”同步,这 两种同步机制如图 12.1.1 所示。 任务 ISR 任务 任务 (1) 事件 标志组 (OS_FLAG_GRP) OSFlagPost() OSFlagCreate() OSFlagDel() OSFlagPendAbort() OSFlagPost() AND OR OSFlagPend() OSFlagPend() OSFlagPendGetFlagsRdy() OSFlagPendGetFlagsRdy() (4) (3)(2) 超时 超时 图 12.1.1 事件标志组 (1) 在 UCOSIII 中事件标志组是 OS_FLAG_GRP,在 os.h 文件中有定义,事件标志组中也 包含了一串任务,这些任务都在等待着事件标志组中的部分(或全部)事件标志被置 1或被清零, 在使用之前,必须创建事件标志组。 (2) 任务和 ISR(中断服务程序)都可以发布事件标志,但是,只有任务可以创建、删除事件 标志组以及取消其他任务对事件标志组的等待。 (3) 任务可以通过调用函数 OSFlagPend()等待事件标志组中的任意个事件标志,调用函数 OSFlagPend()的时候可以设置一个超时时间,如果过了超时时间请求的事件还没有被发布,那 么任务就会重新进入就绪态。 (4) 我们可以设置同步机制为“或”同步还是“与”同步。 UCOSIII中关于事件标志组的API函数如表12.1.1所示,一般情况下我们只使用OSFlagCreate()、 OSFlagPend()和 OSFlagPost()这三个函数。 函数 描述 OSFlagCreate() 创建事件标志组 OSFlagDel() 删除事件标志组 OSFlagPend() 等待事件标志组 OSFlagPendAbort() 取消等待事件标志组 OSFlagPendGetFlagsRdy() 获取使任务就绪的事件标志 OSFlagPost() 向事件标志组发布标志 表 12.1.1 事件标志组 API 函数