0

好的,让我再解释一下。我在结构中有一个指向结构AB类型struct1的指针,还有一个指向另一个称为CDtype的结构的指针,struct2并且定义struct2有一些函数原型,包括Func(param). 如果有人可以帮助我了解一点,我将非常感激。


是的,代码是针对微控制器中的 USB 主机的,我没有添加代码,因为它可以解决问题,但在这里,

电话是:

void USBHOST_Process(USB_OTG_CORE_HANDLE *pdev , USBH_HOST *phost){
    ...
    if (phost->usr_cb->UserInput() == USBH_USR_RESP_OK){
    ...
    }
    ...
}


typedef struct _Host_TypeDef
{
  HOST_State            gState;       /*  Host State Machine Value */
  HOST_State            gStateBkp;    /* backup of previous State machine value */
  ENUM_State            EnumState;    /* Enumeration state Machine */
  CMD_State             RequestState;       
  USBH_Ctrl_TypeDef     Control;

  USBH_Device_TypeDef   device_prop; 

  USBH_Class_cb_TypeDef               *class_cb;  
  USBH_Usr_cb_TypeDef                 *usr_cb;


} USBH_HOST, *pUSBH_HOST;


typedef struct _USBH_USR_PROP
{
  void (*Init)(void);       /* HostLibInitialized */
  void (*DeInit)(void);       /* HostLibInitialized */  
  void (*DeviceAttached)(void);           /* DeviceAttached */
  void (*ResetDevice)(void);
  void (*DeviceDisconnected)(void); 
  void (*OverCurrentDetected)(void);  
  void (*DeviceSpeedDetected)(uint8_t DeviceSpeed);          /* DeviceSpeed */
  void (*DeviceDescAvailable)(void *);    /* DeviceDescriptor is available */
  void (*DeviceAddressAssigned)(void);  /* Address is assigned to USB Device */
  void (*ConfigurationDescAvailable)(USBH_CfgDesc_TypeDef *,
                                     USBH_InterfaceDesc_TypeDef *,
                                     USBH_EpDesc_TypeDef *); 
  /* Configuration Descriptor available */
  void (*ManufacturerString)(void *);     /* ManufacturerString*/
  void (*ProductString)(void *);          /* ProductString*/
  void (*SerialNumString)(void *);        /* SerialNubString*/
  void (*EnumerationDone)(void);           /* Enumeration finished */
  USBH_USR_Status (*UserInput)(void);
  int  (*UserApplication) (void);
  void (*DeviceNotSupported)(void); /* Device is not supported*/
  void (*UnrecoveredError)(void);

}
USBH_Usr_cb_TypeDef;

现在我明白了它的作用,但是我找不到 UserInput(void) 的定义,我找不到它的作用。

4

2 回答 2

3

你所说的“一些函数原型,包括Func(param)”是一个函数指针。您可以调用指针指向的函数,就好像指针表示该函数的名称一样。最里面的结构已经设置了一个指向某个函数的指针;您的代码片段通过其指针调用该函数。

这是一个简短的示例,说明了它是如何工作的(也在 ideone 上):

#include <stdio.h>

typedef struct {
    void (*func)(int);  
} with_fp;

void test(int n) {
    printf("Test %d\n", n);
}

int main(void) {
    with_fp s = {.func = test};
    with_fp *ptr = &s;
    ptr->func(123);
    return 0;
}
于 2012-10-26T21:37:23.297 回答
1

它使用这些参数调用Func()结构的函数。struct2

函数Func()是指向函数的指针,是构成函数的指令开始的指针(内存地址)。

请参阅C 中的函数指针如何工作?解释。

指针是一个变量,必须在用于调用之前设置。

于 2012-10-26T21:31:58.697 回答