事件标志组由2部分组成: (1) 用来保存当前事件组中各事件状态的一些标志位;(2)等待这些标志位置位或清除的任务列表。
与前面的信号量、互斥型信号量一样,也需要通过OS_CFG.H中的事件标志组控制开关量的选择如OS_FLAG_EN 来使用或禁止事件标志组。
900 深入事件标志组
当一个任务开始等待某些事件标志位时,就建立一个OS_FLAG_NODE数据结构。当这些等待的事件标志位发生以后,这个数据结构就会被删除。换句话说:当调用OSFlagPend()时,建立OS_FLAG_NODE.
901 建立一个事件标志组 OSFlagCreate()
902 删除一个事件标志组 OSFlagDel()
903 等待事件标志组的事件标志位 OSFlagPend()
904 置位或清0事件标志组中的事件标志 OSFlagPost()
905 无等待地获得事件标志组中的事件标志 OSFlagAccept()
这个函数和OSFlagPend()非常相似,不同仅在于:如果等待的事件标志没有发生,那么该函数并不停止任务的运行以等待事件标志 ,而是简单的返回一个出错代码。 这个函数可以在中断服务子程序中调用。
906 查询事件标志组的状态 OSFlagQuery()
消息邮箱管理
消息邮箱是UCOSII的另一种通信机制,可以使一个任务或中断服务程序向另一个任务发送一个指针型变量。该指针指向一个包含了“消息”的特定数据结构。
与前面的信号量、互斥型信号量、事件标志组一样,也需要通过OS_CFG.H文件中配置的常数值来确定是否编译该函数。
应用程序可以使用任意多个邮箱,其最大数目由OS_CFG.H文件中配置常数OS_MAX_ENVENTS设定。
1000 建立一个邮箱 OSMboxCreate()
通过调用用上边的函数建立一个邮箱,并且需要定义指针的初始值。
1001 删除一个邮箱 OSMboxDel()
1002 等待邮箱中的消息 OSMboxPend()
1003 向邮箱发送一则消息 OSMboxPost()
1004 向邮箱发送一则消息 OSMboxPostOpt()
它可以完全替代原有的OSMboxPost(),另外,该函数可以向等待邮箱的所有任务发送消息(广播)。
1005 无等待地从邮箱中得到一则消息 OSMboxAccpet()
这个函数的另一用途是: 清空邮箱中现有的内容。
1006 查询一个邮箱的状态 OSMboxQuery()
1007 用邮箱作为二值信号量
一个邮箱可以被用作二值信号量,首先,在初始化时,将邮箱设置为一个非空指针,这样,一个任务可以调用OSMboxPend()函数请求一个信号量,然后通过调用OSMboxPost()函数释放一个信号量。
1008 用邮箱实现延时,而不使用 OSTimeDly()
邮箱的等待超时功能可以用来模仿OSTimeDly()函数的延时,如果在指定时间段TIMEOUT内没有消息到来,函数继续运行。