在中断函数里面有一段
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 编辑 ]
|