当前位置: 首页 > news >正文

队列传输的函数应用原理(拷贝原理)

一.拷贝过程

.第一次拷贝

1.当我们用这个函数的时候,要传入一个变量的地址,此时我们要传入一个指针,此时传进去的是 变量的首地址

在函数参数就会定义一个指针变量 并且将变量的地址赋值给指针

2.从xqueuesend函数进去后 会调用

如上所示的一个copy函数,把地址里面的数据拷贝进去

3.

此时就会将变量数据拷贝到由freertos维护的队列区域(全局变量的句柄的空间)

第二次拷贝

1.同样的 xqueuereceive函数里也会有一个指针变量

此时就把存储在队列里面的数的地址又给到了这里面的变量

开销与优化

1.两次变量的拷贝 在这个情况下 就是开销了24个字节,所以优化(0拷贝)变得十分重要

2.所以我们通过二级指针的办法经行优化,不将整个数据经行拷贝 而是只传递指针

二、0拷贝与二级指针

  • 同第一次传输过程,第二次0拷贝传递的是变量的地址(4字节),相比于自身可能多字节,可以少很多拷贝过程

  • 同时因为在传指针的时候,参数也需要地址,这时候会出现二级指针

拓展

这里一旦队列发送以后,就会检查是否有任务被唤醒进入就绪状态 ,如果有就立马切换

这段代码属于FreeRTOS 实时操作系统的队列(Queue)模块源码,主要功能是处理队列数据的入队操作及任务调度相关逻辑:

  • prvCopyDataToQueue:将数据复制到队列中,完成数据入队的核心操作。

  • 后续逻辑用于检查是否有任务在等待从该队列接收数据(pxQueue->TasksWaitingToReceive),若有则将其从等待列表中移除并解锁,同时根据任务优先级判断是否需要立即进行任务切换(queueYIELD_IF_USING_PREEMPTION()),以保证高优先级任务能及时执行。可以参考:FreeRTOS 任务切换核心机制笔记-CSDN博客

http://www.dtcms.com/a/618727.html

相关文章:

  • 工商局网站开发费用高速公路建设管理局网站
  • redis的启动方式
  • 电子商务基础网站建设与维护单项选择题wordpress 移动端 域名
  • docker启动redis
  • 热点数据自动缓存方案:基于京东 Hotkey 实践
  • 软件著作权可以在哪些方面使用?
  • 【复习】计网每日一题1116大题--MAC帧、IPv4数据报、TVP报文段首部格式-------待补充
  • RF层原理与传输特性介绍
  • 企业网站建设合同应注意什么网站建设工资多少钱
  • YAML配置文件 对缩进非常敏感,错误的缩进会导致解析失败。
  • gca() got an unexpected keyword argument ‘projection‘
  • 网站收录查询爱站律所网站建设国队男子接力赛
  • 单片机/嵌入式修行之路
  • GitHub 热榜项目 - 日榜(2025-11-16)
  • 车联网安全:调试接口安全测试.
  • 人工智能技术- 语音语言- 04 GPT-4 参加专业考试
  • 产品网站开发流程图网站建设get你
  • 从零开始造轮子:用C++实现大语言模型推理的核心逻辑
  • 【Frida Android】实战篇5:SSL Pinning 证书绑定绕过 Hook 教程(二)
  • 东丰网站建设邮件格式模板
  • VB6安全子类化,关闭IDE数据丢失,SetProp写入数据
  • 毕业设计代做网站jsp注册商标设计
  • 网站视频无法播放怎么办湖南省建设厅宁艳芳
  • shell的基础
  • 解决 Oracle 11g Data Guard ORA-16047 的实战经验
  • 友情链接网站源码网站搭建源码
  • 手机做公司网站wordpress二次开发主题
  • RabbitMQ四种交换器类型详解及示例
  • 网站配图尺寸信息流是sem还是seo
  • 安微凤阳县建设局网站网页设计html模板下载