2014-03-19 166 views
1

嗨,大家好,我對微芯片PIC32MX例如工作打印機的主機,其中我來到翻過下面的代碼wherin在節目中找出客戶端驅動程序使用,如果環路used.I我無法以下了解循環的執行情況,我想知道if循環如何返回1或0,我被卡在def類型的usb_client_init函數指針,另外我不明白CLIENT_DRIVER_TABLE usbClientDrvTable []數組的工作情況,它如何決定使用哪個函數。 初始化.operator應該調用指針函數* USB_CLIENT_INIT,但它們對USB_CLIENT_INIT沒有定義,它只是被聲明的。訪問typedef結構數組

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 

    } 

} 

    } 
+2

請格式化你的代碼,它看起來像狗屎 –

+0

好,我也嘗試編輯,打撈這個帖子變成有意義的事情,但放棄了,因爲我完全不明白髮生了什麼這樣說。投票結束... – Lundin

回答

0

看起來您從struct _CLIENT_DRIVER_TABLE中刪除了兩行。應該有EventHandlerflags

第一類型定義聲明USB_CLIENT_INIT是一個指針,它指向需要3個變量和返回一個布爾值的函數。 (您缺少的事件處理程序類似的聲明。)

下的typedef聲明表中的一行。它應該有三個部分,但您的只剩下Initialize部分,這是一個類型爲USB_CLIENT_INIT的函數指針。

接下來,聲明這些條目中的兩個條目的數組。 {}表示這兩個條目應該有三個部分,而不僅僅是一個。

最後,你使用這個數組。

usbClientDrvTable[0]是該陣列的第一個元素。

usbClientDrvTable[0].Initialize處於第一結構中的函數指針。 (它被定義爲USBHostPrinterInitialize。)

usbClientDrvTable[0].Initialize(a,b,c)是將該函數應用於值a,b和c的布爾結果。這與USBHostPrinterInitialize(a,b,c)相同。