lpc1343的USB源码问题

2019-03-25 20:35发布

在中断函数里面有一段 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 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
443799600
1楼-- · 2019-03-26 04:54
_NXP LPC1000_

我自己定义的一个函数指针,编译没有问题,但是主程序里面我加入这个初始化的函数就跑飞了。

 

void (*call_fkt_[256])(void);

void initCommands(void)
{
    u16 count=0;
    currentSession = 0;

    for (count=0; count < 0x0100; count++)
    {
        call_fkt_[count] = callWrongCommand;
    }

    call_fkt_[OUT_FIRM_HARDW_ID] = callHardwareID; //#define OUT_FIRM_HARDW_ID       0x10
    call_fkt_[OUT_INVENTORY_ID] = callInventory;               //#define OUT_INVENTORY_ID        0x31
}
//callWrongCommand、callHardwareID、callInventory都是子函数的函数名,是无参数的子函数。


望高手分析下,我的这个指针是定义以后初始化,而例程的是定义的时候就初始化好了。是不是这里有问题?

chnht555
2楼-- · 2019-03-26 05:48
 精彩回答 2  元偷偷看……

一周热门 更多>