我一直在浏览 AT91SAM7 的 Atmel 库 USB,有些东西我不明白。Endpoint 是一个结构体,定义如下:
typedef struct {
volatile unsigned char state;
volatile unsigned char bank;
volatile unsigned short size;
Transfer transfer; //thus Endpoint contains an instance of "Transfer"
} Endpoint
观点; 而Transfer本身是一个结构如下:
typedef struct {
char *pData;
volatile int buffered;
volatile int transferred;
volatile int remaining;
volatile TransferCallback fCallback;
void *pArgument;
} Transfer;
而 TransferCallback 是一个具有以下原型的函数:
typedef void (*TransferCallback)(void *pArg, unsigned char status, unsigned int transferred, unsigned int remaining);
还定义了两个指针,如下所示:
Endpoint *pEndpoint = &(endpoints[bEndpoint]);
Transfer *pTransfer = &(pEndpoint->transfer);
我想知道为什么这种调用函数 TransferCallback 的方式是有效的:
((TransferCallback) pTransfer->fCallback) (followed by the required arguments passed )
但这是无效的:
((TransferCallback)pEndpoint->transfer->fCallback)?
如何在不使用诸如 pTransfer 之类的指针的情况下直接调用 TransferCallback?我尝试了多种组合,但都没有奏效。