0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

uC/OS-II—邮箱介绍

冬至子 来源:硬件工程师技术干货 作者:硬件工程师技术干 2023-09-11 15:35 次阅读

在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结构体中。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单线程
    +关注

    关注

    0

    文章

    15

    浏览量

    1745
  • ucos-ii
    +关注

    关注

    1

    文章

    11

    浏览量

    3519
收藏 人收藏

    评论

    相关推荐

    uc os-ii官方网站

    uc os-ii的官方网站是:uc os-ii官方网站http://www.micrium.com/
    发表于 06-26 13:36

    uC/OS-II简介

    信号量,邮箱,消息队列,内存管理,中断管理等。任务管理uC/OS-II 中最多可以支持64 个任务,分别对应优先级0~63,其中0 为最高优先级。63为最低级,系统保留了4个最高优先级的任务和4个最低
    发表于 10-08 09:11

    uC/OS-II简介

    信号量,邮箱,消息队列,内存管理,中断管理等。任务管理uC/OS-II 中最多可以支持64 个任务,分别对应优先级0~63,其中0 为最高优先级。63为最低级,系统保留了4个最高优先级的任务和4个最低
    发表于 10-11 09:26

    uC/OS-II简介

    信号量,邮箱,消息队列,内存管理,中断管理等。任务管理uC/OS-II 中最多可以支持64 个任务,分别对应优先级0~63,其中0 为最高优先级。63为最低级,系统保留了4个最高优先级的任务和4个最低
    发表于 10-15 11:03

    uC/OS-II简介

    信号量,邮箱,消息队列,内存管理,中断管理等。任务管理uC/OS-II 中最多可以支持64 个任务,分别对应优先级0~63,其中0 为最高优先级。63为最低级,系统保留了4个最高优先级的任务和4个最低
    发表于 10-20 09:35

    uC/OS-II简介

    信号量,邮箱,消息队列,内存管理,中断管理等。任务管理uC/OS-II 中最多可以支持64 个任务,分别对应优先级0~63,其中0 为最高优先级。63为最低级,系统保留了4个最高优先级的任务和4个最低
    发表于 10-25 09:59

    uC/OS-II简介

    信号量,邮箱,消息队列,内存管理,中断管理等。任务管理uC/OS-II 中最多可以支持64 个任务,分别对应优先级0~63,其中0 为最高优先级。63为最低级,系统保留了4个最高优先级的任务和4个最低
    发表于 10-27 09:29

    如何去解决uC/OS-II中优先级翻转问题?

    uC/OS-II的运行机制是什么?uC/OS-II中的优先级翻转问题有哪些?如何去解决uC/OS-II
    发表于 04-25 07:07

    uC/OS-II源码包的下载

    ,如下图所示。uC/OS-II内核结构2、对各部分的进一步解释:第一部分 (1):与硬件无关的高层的操作系统部分大部分是关于任务的创建、信号量的创建、邮箱和队列的创建,以...
    发表于 08-05 08:09

    uC/OS-II移植过程记录

    怎么去移植uC/OS-II系统呢?移植uC/OS-II系统的过程是怎样的?
    发表于 11-01 07:38

    为什么想学uc/OS-II

    请大家先想一下,为什么想学uc/OS-II?在通过例程学习单片机的时候有没有这样的疑问,为什么例程是一个个孤立的呢,能否整合在一起?RTOS就是这样一个多线程运行的好工具,我选取UCOS来实现
    发表于 02-18 07:16

    The uC/OS-II port for Keil C V

    The uC/OS-II port for Keil C V6.20, V6.21 or higher
    发表于 03-25 14:18 57次下载

    基于uc/os-ii 的嵌入式GUI研究与应用

    目前,uc/os-ii 在嵌入式系统中得到了广泛的应用,但适用于uc/os-ii 的图形界面却很少。本文介绍了一种适用于
    发表于 08-24 08:17 20次下载

    uC/OS-II 应用程序基本结构及重要的API介绍

    应用uC/OS-II,自然要为它开发应用程序,下面论述基于uC/OS-II的应用程序的基本结构以及注意事项。 每一个uC/
    发表于 10-24 11:28 2次下载

    【嵌入式系统—实时操作系统】uC/OS-II 及其STM32F103移植

    ,如下图所示。uC/OS-II内核结构2、对各部分的进一步解释:第一部分 (1):与硬件无关的高层的操作系统部分大部分是关于任务的创建、信号量的创建、邮箱和队列的创建,以...
    发表于 12-23 19:58 5次下载
    【嵌入式系统—实时操作系统】<b class='flag-5'>uC</b>/<b class='flag-5'>OS-II</b> 及其STM32F103移植