查看: 2590|回复: 1

[MQX] 我想问一个关于MQX队列的问题

[复制链接]

该用户从未签到

8

主题

40

帖子

0

注册会员

Rank: 2

积分
77
最后登录
1970-1-1
发表于 2013-9-1 08:33:24 | 显示全部楼层 |阅读模式
 MQX4.0中
队列的初始化是
      /* Set up the device driver queue */
      _QUEUE_INIT(&kernel_data->IO_DEVICES, 0);
这个函数的宏定义是#define _QUEUE_INIT(queue, max)      _queue_init((QUEUE_STRUCT_PTR)(queue), max)
_queue_init这个函数的实现是
void _queue_init
(
    QUEUE_STRUCT_PTR q_ptr,
    uint_16          size
)
{ /* Body */
 
    _QUEUE_INIT(q_ptr, size);
 
} /* Endbody */
/*!
我就觉得好奇怪,这不是又变回去了嘛?这个之间到底是怎么操作的才可以进行队列的实现?
进入队列的时候
   _QUEUE_ENQUEUE(&kernel_data->IO_DEVICES, dev_ptr);
#define _QUEUE_ENQUEUE(queue,element) \
   _queue_enqueue((QUEUE_STRUCT_PTR)(queue), \
      (QUEUE_ELEMENT_STRUCT_PTR)((pointer)(element)))
#endif也是这个现象
_queue_enqueue这个函数最终还是调用 _QUEUE_ENQUEUE
boolean _queue_enqueue
(
    QUEUE_STRUCT_PTR         q_ptr,
    QUEUE_ELEMENT_STRUCT_PTR e_ptr
)
{ /* Body */
 
    _int_disable();
    if ((q_ptr->MAX != 0) && (q_ptr->SIZE >= q_ptr->MAX))
    {
        _int_enable();
        return (FALSE);
    } /* Endif */
 
    _QUEUE_ENQUEUE(q_ptr, e_ptr);
    _int_enable();
    return (TRUE);
 
} /* Endbody */
 
 

我就好郁闷,这个他是怎么操作过来的呢?
我知道答案 目前已有0人回答
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2013-9-10 14:50:36 | 显示全部楼层

    RE:我想问一个关于MQX队列的问题

    这个要研究一下。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-9 13:41 , Processed in 0.087258 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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