全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

uC/OS-II—邮箱介绍

时间:2023-09-11 15:35

人气:

作者:admin

标签:   介绍  OS-    OS-II  邮箱 

导读:在uC/OS-II中邮箱是线程(任务)通讯的一种,使用邮箱能够发送一个指针,当然也可以发送指针大小的数据。...

在uC/OS-II中邮箱是线程(任务)通讯的一种,使用邮箱能够发送一个指针,当然也可以发送指针大小的数据。

大致原理是,如果邮箱中没有邮件(数据),此时线程尝试获取,会导致线程进入挂起状态。当邮箱中有邮件时,恢复最高优先级线程。

经常使用的几个函数,如下:

1、OSMboxCreate()

创建一个邮箱,并进行初始化

2、OSMboxPend()

尝试从邮箱获取邮件,如果邮箱中有邮件则立即获得,退出此函数。如果邮箱为空,调用线程进入挂起状态,等待邮件到来。

在uC/OS-II中多个线程等待邮件时,不是采用链表的方式,采用链表就有优先级排序问题,排序时间和链表长度有关,时间不可控,实时性差一些。uC/OS-II采用了一种巧妙的方式,以后专门写个文章叙述一下。

此函数不能在ISR中调用。

3、OSMboxPost()

尝试发送邮件:

1)如果有线程正在等待邮件,则把邮件发送给优先级最高的线程。在uC/OS-II中无论等待的线程有多少个,从这些线程中挑选出最高优先级的时间是一样的,这一点非常重要,也是实时操作系统的特点,时间可控。

2)如果没有线程等待邮件,看一下邮箱是否已满,满则返回错误码,空则把邮件放入邮箱。

4、OSMboxAccept

尝试获取邮件,如果邮箱里有邮件,直接取出来,如果没有返回(void *)0邮件,不会挂起线程。

5、OSMboxPendAbort

取消挂起的线程,被恢复的线程获得(void *)0邮件,这个函数有两个选项,一个是只恢复最高优先级线程,另外一个是恢复所有正在等待的线程。

6、OSMboxPostOpt

这个函数比OSMboxPost()多了几个选项:

NONE:和OSMboxPost()完全一样。

BROADCAST:等待的线程全部获得相同邮件。

NO_SCHED:恢复最高优先级的线程,但是不进行线程调度

7、OSMboxDel

删除邮箱,删除时有两个选项:

NO_PEND:只有没有线程挂起等待时才能删除邮箱

ALWAYS:直接删除,如果有线程等待,恢复等待线程,线程获得(void *)0邮件。

8、OSMboxQuery

查询邮箱,结果放在OS_MBOX_DATA结构体中。

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信