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

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

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-21 13:07
  • 签到天数: 141 天

    [LV.7]常住居民III

    29

    主题

    559

    回帖

    2110

    积分

    荣誉版主

    积分
    2110
    发表于 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 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
    回复 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-4-21 13:07
  • 签到天数: 141 天

    [LV.7]常住居民III

    29

    主题

    559

    回帖

    2110

    积分

    荣誉版主

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

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-4-21 13:07
  • 签到天数: 141 天

    [LV.7]常住居民III

    29

    主题

    559

    回帖

    2110

    积分

    荣誉版主

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

    回复 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-4-29 17:40 , Processed in 0.060571 second(s), 40 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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