找回密码
 立即注册
查看: 652|回复: 2

FreeRTOS for STC32G12K128内核代码解读(三)队列(3)

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2024-3-17 10:14:15 | 显示全部楼层 |阅读模式
FreeRTOS for STC32G12K128内核代码解读
第三章  队列(3)队列读/写  ---Gentleman
截图202403171013401341.jpg



1.写队列xQueueSend()
   1.1 写队列前
    截图202403170859366183.jpg
    默认的是这种 queueSEND_TO_BACK 方式 (下面会展开讲)
    截图202403170901038051.jpg
    关闭了总中断
  
   if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) )
   判断一下 队列是否满了(存入项数<总项数),或者覆盖模式
   xYieldRequired = prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition );
   没满就调用prvCopyDataToQueue() 实现入队操作

    1.2入队函数prvCopyDataToQueue()
       截图202403170913294909.jpg

       uxMessagesWaiting = pxQueue->uxMessagesWaiting;
      获取一下存入项数
      信号量部分先跳过
      截图202403170915366926.jpg
       看这段代码,这是默认的入队方式queueSEND_TO_BACK


        ( void ) memcpy( ( void * ) pxQueue->pcWriteTo, pvItemToQueue, ( size_t ) pxQueue->uxItemSize );
     这里用memcpy 把项 复制到 pcWriteTo 待写指针指向的空间
         pxQueue->pcWriteTo += pxQueue->uxItemSize;
     写完了,把待写指针下移,指向等待写入新项的空间
       if( pxQueue->pcWriteTo >= pxQueue->u.xQueue.pcTail )                                             /*lint !e946 MISRA exception justified as comparison of pointers is the cleanest solution. */
        {
            pxQueue->pcWriteTo = pxQueue->pcHead;
        }
    写到尾部了,就指向头部
      


     对比队列读/写图来看  
    pxQueue->uxMessagesWaiting = uxMessagesWaiting + ( UBaseType_t ) 1;

    已存入项+1


  关于阻塞的部分先不看
   
2.读队列xQueueReceive()


   与写相似的地方就不看了
   直接看prvCopyDataFromQueue()
    截图202403170956369621.jpg

    先讲读指针 下移
    如果指向了尾部
    就指向头部 (首个插入的数据 ,还是看图)

    (下一次再读,就是读第二次写入的数据了)

                    pxQueue->uxMessagesWaiting = uxMessagesWaiting - ( UBaseType_t ) 1;

       存入队列项数-1



   
      




1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2024-3-17 17:33:46 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2024-3-17 17:33:53 | 显示全部楼层

回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 00:55 , Processed in 0.113925 second(s), 60 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表