zoukankan      html  css  js  c++  java
  • 队列管理

    1.队列的特性

      队列可以保存有限个具有确定长度的数据单元。队列可以保存最大数目被称为队列的深度。在创建队列时需要确定队列的长度和每个单元的大小。

        xQueueHandle xQueueCreate(unsigned portBASE_TYPE uxQueueLength,//the depth of the queue

                      unsigend portBASE_TYPE uxItemSzie);//the size of a single element

        RETURN VALUE :

                NULL :there if not enougth space .

                xQueueHandle :the handle of the queue .            

       当读队列时,队列为空,那么读队列函数将会阻塞。通过xQueueReceive(),xQueuePeek()从队列中获取元素(中断中调用xQueueReceiveFromISR())。可以通过函数第三个参数设置超时,若在超时时间内没有读取到数据,则函数返回NULL.当多个任务同时等待读取同一个队列时,优先级最高的,和等待时间最长的任务会优先读取到队列。

      portBASE_TYPE xQueueReceive (xQueueHandlle xQueue,//队列句柄

                       const void * pvBuffer,//接收缓存指针,指向一段内存区域,用来接收从队列中拷贝来的数据。

                      portTickType xTicksToWait);//设置超时时间,单位是心跳。

       写队列和读队列的阻塞情况相同。

    2.工作于大型数据单元

      如果队列存储数据单元较大,那么最好是利用队列来传递数据指针,而不是队列数据本身在队列上一字节一字节拷贝。传递指针注意以下两点

        1.指针指向的内存空间的所有权必须明确。(原则上,共享内存在其指针发送到队列之前,内容只允许被发送任务访问:共享内存指针指针从队列读出后,其内容也之循序被接收任务访问)。

        2.指正指向的内存空间必须有效(如果指针指向的内存是动态分配的,只应该有一个任务负责对其进行内存释放)。

  • 相关阅读:
    some math words
    图论中匹配问题的三种算法
    如何查看静态库和动态库是32位还是64位
    C/C++语言的版本, Visual Studio版本
    codeblocks
    文件类型
    上海职称评定
    微信登录
    手机归属地查询
    创建AOP静态代理(上篇)
  • 原文地址:https://www.cnblogs.com/a-lai/p/7805783.html
Copyright © 2011-2022 走看看