查看: 176|回复: 0

[原创] freertos 的 queue队列出错

[复制链接]

94

主题

3

好友

1764

积分

进士

Rank: 5Rank: 5

  • TA的每日心情

    2016-11-20 10:28
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2016-9-20 15:40:50 |显示全部楼层
    在用M4跑FREERTOS的时候,队列出错。


    找到出错的代码:
    configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
    经过研究是这一句话报错。
    开始分析:
    里面2个条件成立才会报错。

    pvItemToQueue == NULL。这句话是这样解释的,指向将要放到队列的数据指针。item 是队列的一组数据。
    * @param pvItemToQueue A pointer to the item that is to be placed on the
    * queue.  The size of the items the queue will hold was defined when the
    * queue was created, so this many bytes will be copied from pvItemToQueue
    * into the queue storage area.

    pxQueue->uxItemSize 这个参数是什么? 队列保持的每组数据的长度。
    UBaseType_t uxItemSize;                        /*< The size of each items that the queue will hold. */

    综合起来,指向的数据为空,但是长度不为0.
    那就是说要发送的数据为空,你还调用了队列的send函数。至此原因已经找到。

    BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition )
    {
    BaseType_t xEntryTimeSet = pdFALSE;
    TimeOut_t xTimeOut;
    Queue_t * const pxQueue = ( Queue_t * ) xQueue;

            configASSERT( pxQueue );
            // 如果这里出问题,那么pvItemToQueue是NULL, pxQueue->uxItemSize不等于0,是不是就是说,长度不为0,但是没数据的意思?
            //这句话究竟是什么意思?
            configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );
    }
    qhq





    回复

    使用道具 举报

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

    关闭

    站长推荐上一条 /6 下一条


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-5 10:30 , Processed in 0.239577 second(s), 9 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部