在中断函数里面有一段
if (USB_P_EP[0]) {
USB_P_EP[0](USB_EVT_SETUP);
continue;
}
原型在下面:
#define P_EP(n) ((USB_EP_EVENT & (1 << (n))) ? USB_EndPoint##n : NULL)
/* USB Endpoint Events Callback Pointers */
void (* const USB_P_EP[USB_LOGIC_EP_NUM]) (uint32_t event) = {
P_EP(0),
P_EP(1),
P_EP(2),
P_EP(3),
};
寻高人解释下。
----------------------------------
好好分析了一下:
void (* const USB_P_EP[USB_LOGIC_EP_NUM]) (uint32_t event) = {
P_EP(0),
P_EP(1),
P_EP(2),
P_EP(3),
};这个我知道是结构体函数指针,他指向的应该是4个逻辑端点中断处理函数的地址。
那么里面的
#define P_EP(n) ((USB_EP_EVENT & (1 << (n))) ? USB_EndPoint##n : NULL)
就应该是指向函数的指针,这个宏是一个判断语句。
主要还是这个USB_EndPoint##n 不知道什么含义。
结合上下文的意思。个人觉得就是也是一个MDK预处理类的命令。
编译的时候USB_EndPoint##n 就相当于USB_EndPointn。 (n编译的时候带入前面的数字)
不知道上面的理解对不对。
[
本帖最后由 443799600 于 2010-6-7 14:07 编辑 ]
此帖出自
小平头技术问答
一周热门 更多>