HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核基础-消息队列queue

这篇具有很好参考价值的文章主要介绍了HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核基础-消息队列queue。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核基础-消息队列queue,OpenHarmony鸿蒙攻城记,harmonyos,华为,OpenHarmony,LiteOS,鸿蒙

一、消息队列基本概念

  • 队列又称消息队列,是一种常用于任务间通信的数据结构。队列接收来自任务或中断的不固定长度消息,并根据不同的接口确定传递的消息是否存放在队列空间中。

  • 任务能够从队列里面读取消息,当队列中的消息为空时,挂起读取任务;当队列中有新消息时,挂起的读取任务被唤醒并处理新消息。任务也能够往队列里写入消息,当队列已经写满消息时,挂起写入任务;当队列中有空闲消息节点时,挂起的写入任务被唤醒并写入消息。

  • 可以通过调整读队列和写队列的超时时间来调整读写接口的阻塞模式,如果将读队列和写队列的超时时间设置为 0,就不会挂起任务,接口会直接返回,这就是非阻塞模式。反之,如果将都队列和写队列的超时时间设置为大于 0 的时间,就会以阻塞模式运行。

  • 消息队列提供了异步处理机制,允许将一个消息放入队列,但不立即处理。同时队列还有缓冲消息的作用,可以使用队列实现任务异步通信,队列具有如下特性:

    • 消息以先进先出的方式排队,支持异步读写。
    • 读队列和写队列都支持超时机制。
    • 每读取一条消息,就会将该消息节点设置为空闲。
    • 发送消息类型由通信双方约定,可以允许不同长度(不超过队列的消息节点大小)的消息。
    • 一个任务能够从任意一个消息队列接收和发送消息。
    • 多个任务能够从同一个消息队列接收和发送消息。
    • 创建队列时所需的队列空间,接口内系统自行动态申请内存。

二、消息队列运行机制

  • 创建队列时,创建队列成功会返回队列 ID。

  • 在队列控制块中维护着一个消息头节点位置 Head 和一个消息尾节点位置 Tail,用于表示当前队列中消息的存储情况。Head 表示队列中被占用的消息节点的起始位置。Tail 表示被占用的消息节点的结束位置,也是空闲消息节点的起始位置。队列刚创建时,Head 和 Tail 均指向队列起始位置。

  • 写队列时,根据 readWriteableCnt[1]判断队列是否可以写入,不能对已满(readWriteableCnt[1]为 0)队列进行写操作。写队列支持两种写入方式:向队列尾节点写入,也可以向队列头节点写入。尾节点写入时,根据 Tail 找到起始空闲消息节点作为数据写入对象,如果 Tail 已经指向队列尾部则采用回卷方式。头节点写入时,将 Head 的前一个节点作为数据写入对象,如果 Head 指向队列起始位置则采用回卷方式。

  • 读队列时,根据 readWriteableCnt[0]判断队列是否有消息需要读取,对全部空闲(readWriteableCnt[0]为 0)队列进行读操作会引起任务挂起。如果队列可以读取消息,则根据 Head 找到最先写入队列的消息节点进行读取。如果 Head 已经指向队列尾部则采用回卷方式。

  • 删除队列时,根据队列 ID 找到对应队列,把队列状态置为未使用,把队列控制块置为初始状态,并释放队列所占内存。

HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核基础-消息队列queue,OpenHarmony鸿蒙攻城记,harmonyos,华为,OpenHarmony,LiteOS,鸿蒙

三、消息队列开发流程

  • 用 LOS_QueueCreate 创建队列。创建成功后,可以得到队列 ID。
  • 通过 LOS_QueueWrite 或者 LOS_QueueWriteCopy 写队列。
  • 通过 LOS_QueueRead 或者 LOS_QueueReadCopy 读队列。
  • 通过 LOS_QueueInfoGet 获取队列信息。
  • 通过 LOS_QueueDelete 删除队列。

四、消息队列使用说明

  • 系统支持的最大队列数是指:整个系统的队列资源总个数,而非用户能使用的个数。例如:系统软件定时器多占用一个队列资源,那么用户能使用的队列资源就会减少一个。
  • 创建队列时传入的队列名和 flags 暂时未使用,作为以后的预留参数。
  • 队列接口函数中的入参 timeOut 是相对时间。
  • LOS_QueueReadCopy 和 LOS_QueueWriteCopy 及 LOS_QueueWriteHeadCopy 是一组接口,LOS_QueueRead 和 LOS_QueueWrite 及 LOS_QueueWriteHead 是一组接口,每组接口需要配套使用。
  • 鉴于 LOS_QueueWrite 和 LOS_QueueWriteHead 和 LOS_QueueRead 这组接口实际操作的是数据地址,用户必须保证调用 LOS_QueueRead 获取到的指针所指向的内存区域在读队列期间没有被异常修改或释放,否则可能导致不可预知的后果。
  • LOS_QueueReadCopy 接口的读取长度如果小于消息实际长度,消息将被截断。
  • 鉴于 LOS_QueueWrite 和 LOS_QueueWriteHead 和 LOS_QueueRead 这组接口实际操作的是数据地址,也就意味着实际写和读的消息长度仅仅是一个指针数据,因此用户使用这组接口之前,需确保创建队列时的消息节点大小,为一个指针的长度,避免不必要的浪费和读取失败。

五、消息队列接口

功能类别 接口函数 描述
创建/删除消息队列 LOS_QueueCreate 创建一个消息队列,由系统动态申请队列空间
LOS_QueueCreateStatic 创建一个消息队列,由用户分配队列内存空间传入接口
LOS_QueueDelete 根据队列ID删除一个指定队列
读/写队列(不带拷贝) LOS_QueueRead 读取指定队列头节点中的数据(队列节点中的数据实际上是一个地址)
LOS_QueueWrite 向指定队列尾节点中写入入参bufferAddr的值(即buffer的地址)
LOS_QueueWriteHead 向指定队列头节点中写入入参bufferAddr的值(即buffer的地址)
读/写队列(带拷贝) LOS_QueueReadCopy 读取指定队列头节点中的数据
LOS_QueueWriteCopy 向指定队列尾节点中写入入参bufferAddr中保存的数据
LOS_QueueWriteHeadCopy 向指定队列头节点中写入入参bufferAddr中保存的数据
获取队列信息 LOS_QueueInfoGet 获取指定队列的信息,包括队列ID、队列长度、消息节点大小、头节点、尾节点、可读节点数量、可写节点数量、等待读操作的任务、等待写操作的任务、等待mail操作的任务

六、代码分析(待续…)

坚持就有收获

HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核基础-消息队列queue,OpenHarmony鸿蒙攻城记,harmonyos,华为,OpenHarmony,LiteOS,鸿蒙文章来源地址https://www.toymoban.com/news/detail-828038.html

到了这里,关于HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核基础-消息队列queue的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HCIA-HarmonyOS设备开发认证V2.0-IOT硬件子系统-ADC

    ADC(Analog to Digital Converter)模数转换器。现实生活中的所有属性(如温度、湿度、光照强度等)都是连续的,即为模拟信号;而单片机或电子计算机所能识别的信号都是离散的数字信号。此时,若是需要使用现实世界中的各种属性,就需要一种设备将模拟信号转换为数字信号

    2024年02月21日
    浏览(42)
  • HCIA-HarmonyOS设备开发认证V2.0-IOT硬件子系统-SPI

    SPI 是串行外设接口(Serial Peripheral Interface)是一种高速的全双工同步的通信总线。 SPI 是由 Motorola 公司开发,用于在主设备和从设备之间进行通信,常用于与闪存、实时时钟、传感器以及模数转换器等进行通信。 SPI 通信通常由主设备发起,通过以下步骤完成一次通信: 通过

    2024年02月22日
    浏览(39)
  • HCIA-HarmonyOS设备开发认证V2.0-IOT硬件子系统-WatchDog

    看门狗(Watchdog),又称看门狗计时器(Watchdog timer),是一种硬件计时设备。一般有一个输入、一个输出,输入叫做喂狗,输出连接到系统的复位端。当系统主程序发生错误导致未及时清除看门狗计时器的计时值时,看门狗计时器就会对系统发出复位信号,使系统从悬停状态

    2024年02月21日
    浏览(41)
  • HCIA-HarmonyOS设备开发认证V2.0-IOT硬件子系统-GPIO

    轻量系统设备通常需要进行外设控制,例如温湿度数据的采集、灯开关的控制,因此在完成内核开发后,需要进行设备驱动的开发。 主要Hi3861芯片介绍如何运用 IoT 硬件子系统进行轻量系统设备的驱动开发。 在轻量系统的联接模组中,智能家居远程控制能力的实现,最终是通

    2024年02月21日
    浏览(36)
  • HCIA-HarmonyOS设备开发认证-HarmonyOS简介

    本章主要介绍HarmonyOS分布式操作系统的概念、关键技术与能力以及HarmonyOS典型的应用场景。 学习完成本课程后,您将能够: 了解HarmonyOS的相关概念和产品定位; 了解HarmonyOS的技术架构; 了解HarmonyOS的关键特性。 HarmonyOS 是一款面向万物互联时代的、全新的分布式操作系统。

    2024年01月25日
    浏览(33)
  • HCIA-HarmonyOS设备开发认证-序

    最近涉及到HarmonyOS鸿蒙系统设备开发,在网络上已经有很多相关资料,视频教程,我也移植了公司的一个stm32G474板卡,运行LiteOS-m L0系统。 一面看资料一面移植,遇到不少坑,当看到运行的LOGO时,那是非常激动了。 由于没有系统性的学习,难免遇到不少坑,自己也决定找个

    2024年01月20日
    浏览(40)
  • HCIA-HarmonyOS应用开发工程师 V2.0 模拟考试

    低代码开发提供UI可视化开发能力,支持自由拖拽组件和可视化数据绑定,可快速预览效果,所见即所得。通过拖拽式编排、可视化配置的方式,帮助开发者减少重复性的代码编写,快速地构建多端应用程序。 正确(True) 在使用ArkTS语言开发界面UI代码过程中,如果添加或删除

    2024年02月04日
    浏览(52)
  • HCIA-HarmonyOS Application Developer学习笔记

    HarmonyOS 是一款面向万物互联时代的、全新的分布式操作系统,它是一个全场景分布式智慧操作系统,覆盖了1+8+N全场景终端设备,其中手机是整个分布式能力的核心。 与原生Android 系统对比,HarmonyOS 不仅可以支持手机,还可以支持电脑、智慧屏、穿戴设备、智能家居、车机系

    2024年02月13日
    浏览(27)
  • HCIA-HarmonyOS Application Developer——题目集2

    题目1 1、HarmonyOS的\\\"1+8N”战略中的\\\"1\\\"指的是什么? A、智慧屏 B、平板电脑 C、手表 D、手机 解析:( D ) HarmonyOS是一款面向万物互联时代的、全新的分布式操作系统,是一个全场景分布式智慧操作系统,覆盖了1+8+N全场景终端设备,其中手机是整个分布式能力的核心。 题目2

    2024年02月13日
    浏览(26)
  • HCIA-HarmonyOS Application Developer——题目集4

    题目1 1、(多选)对于HarmnyOS设备,传统蓝牙本机管理涉及下列哪些操作? A、扫描和取消扫描周边蓝牙设备 B、打开和关闭蓝牙 C、向远端设备发起配对 D、设置和获取本机蓝牙名称 解析:( ABD ) 传统蓝牙 指的是Bluetooth3.0以下的蓝牙,而 低功耗蓝牙 指的是Bluetooth4.0以上的蓝

    2024年02月07日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包