在线时间3 小时
UID344154
注册时间2012-2-27
NXP金币0
该用户从未签到
注册会员

- 积分
- 77
- 最后登录
- 1970-1-1
|
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 */
     
我就好郁闷,这个他是怎么操作过来的呢?
|
|