大家好我正在开发基于Microchip的PIC32MX打印机主机示例,其中我在程序中找到了以下代码,以找出使用以下if循环的客户端驱动程序。我无法理解执行循环,
我想知道if循环如何返回1或0,我在usb_client_init函数指针的类型def卡住了,我也不明白CLIENT_DRIVER_TABLE usbClientDrvTable []数组的工作原理,它如何决定使用哪个函数。 初始化.operator应该调用指针函数* USB_CLIENT_INIT但它们没有USB_CLIENT_INIT的定义,它只是被声明。
typedef BOOL (*USB_CLIENT_INIT) (BYTE, DWORD ,BYTE);
typedef struct _CLIENT_DRIVER_TABLE {
USB_CLIENT_INIT Initialize; // Initialization routine
} CLIENT_DRIVER_TABLE;
CLIENT_DRIVER_TABLE usbClientDrvTable[] = {
{
USBHostPrinterInitialize, // It is a function
USBHostPrinterEventHandler, // It is a function
0
},
{ USBHostPrinterInitialize, // It is a function
USBHostPrinterEventHandler, // It is a function
1
}
};
void main()
{
while(1)
{
char temp=0;
if( !usbClientDrvTable[temp].Initialize(a,b,c))
{
//do something
}
}
}
答案 0 :(得分:0)
看起来你从struct _CLIENT_DRIVER_TABLE
删除了两行。还应该有EventHandler
和flags
。
第一个typedef声明USB_CLIENT_INIT
是一个指向一个函数的指针,该函数接受3个变量并返回一个bool。 (您缺少类似的事件处理程序声明。)
下一个typedef声明表的一行。它应该有三个部分,但是你的部分只剩下Initialize
部分,这是USB_CLIENT_INIT
类型的函数指针。
接下来,声明其中两个条目的数组。 {
和}
表示这两个条目应该包含三个部分,而不仅仅是一个部分。
最后,您使用此数组。
usbClientDrvTable[0]
是数组的第一个元素。
usbClientDrvTable[0].Initialize
是第一个结构中的函数指针。 (它被定义为USBHostPrinterInitialize
。)
usbClientDrvTable[0].Initialize(a,b,c)
是将该函数应用于值a,b和c的布尔结果。这与USBHostPrinterInitialize(a,b,c)
相同。