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

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

3天内不再提示

uC/OS-II队列原理 队列相关函数介绍

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

1、uC/OS-II队列原理

消息队列是线程间通讯的一种,主要用作数据缓冲,用途非常广泛。一般情况下遵循先进先出原则。先来看队列结构体:

uC/OS-II使用一个指针数组实现了消息队列,数组中每个元素可以存放一个指针。当然如果不传输指针传输普通数据也是可以的。

这个指针数组经过函数OSQCreate()处理后变成如下这个样子。OSQIn、OSQOut都指向起始位置。

这其实是一个环形队列结构,现在把上面的图形掰弯,如下:

工作原理大致是:

当OSQPost()函数向队列中放数据后,OSQIn移动一个位置。如果OSQIn指针已经旋转到末尾,则重新指向起始位置。OSQIn指向数据即将要插入的位置,换句话说它指的地方是“空的”。

OSQPend()函数从队列中取出数据后OSQOut移动一个位置。如果OSQOut指针已经旋转到末尾,则重新指向起始位置。OSQOut指向最“旧”的数据, 换句话说它指的地方是“满的”。

数据取放示意图如下:

2、队列相关函数介绍

OSQCreate()

初始化事件结构体,根据参数提供的内存起始地址以及大小,把这一块内存初始化为环形队列。

OSQPost()

此函数尝试存入数据,如果有线程正在等待数据,则选取最高优先级的线程,并把它恢复为运行态。数据直接给了等待线程,没有进入环形队列。

如果没有线程等待,此函数把数据放入队列,放入后OSQIn移动一个位置,如果OSQIn已经到了OSQEnd位置,重新设置为OSQStart。

如果队列已经满了,再次调用此函数,直接返回错误码,不会覆盖队列中的数据。

OSQPend()

此函数尝试从队列取出数据,如果队列中有数据,那么把最旧的数据取出来。交给线程即可。如果队列是空队列,则挂起当前线程,直至其它线程向队列发送数据或者线程等待超时。

OSQAccept()

队列中有数据取出来,没有数据也不会挂起线程。可用于查询。

OSQFlush()

清空队列

OSQPostFront()

反向放数据,把数据放到队列尾部。

OSQQuery()

队列信息查询,信息放到结构体中。

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

    关注

    6

    文章

    1922

    浏览量

    45482
  • 消息队列
    +关注

    关注

    0

    文章

    33

    浏览量

    2977
  • ucos-ii
    +关注

    关注

    1

    文章

    11

    浏览量

    3593
收藏 人收藏

    评论

    相关推荐

    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

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

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

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

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

    正点原子开拓者FPGA Qsys视频:uCOS II消息邮箱和消息队列

    uC/OS-II目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。
    的头像 发表于 09-17 07:04 2123次阅读
    正点原子开拓者FPGA Qsys视频:uCOS <b class='flag-5'>II</b>消息邮箱和消息<b class='flag-5'>队列</b>

    【嵌入式系统—实时操作系统】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移植

    uC/OS-II—邮箱介绍

    uC/OS-II中邮箱是线程(任务)通讯的一种,使用邮箱能够发送一个指针,当然也可以发送指针大小的数据。
    的头像 发表于 09-11 15:35 1115次阅读