不完全的。“返回值”(引用是因为它实际上不是从函数返回,而是转换的结果)(void *)57600
只是57600
被视为(或换句话说,转换为)void 指针的值。
而且,虽然您实际上是在转换 57600
为 void 指针,但几乎可以肯定它不会被用作指针。更有可能的是,原型adi_stdio_ControlDevice
有一个通用参数(一个可以用于许多事情的参数)。
设备控制功能特别容易做到这一点,因为它们是通用的,适用于多种设备,因此您可能必须为调用提供多种类型。
您可能会发现,对于设置波特率的命令,它只是在使用之前在另一端转换回一个整数值,例如:
static int localSpeed;
static char *localString;
static double localPi;
static struct rational { int numerator; int denominator } localStruct;
bool adi_stdio_ControlDevice (HANDLE hndl, COMMAND cmd, void *generic) {
switch (cmd) {
case ADI_STDIO_COMMAND_SET_UART_BAUD_RATE: {
localSpeed = (int)generic;
break;
}
case ADI_COMMAND_WITH_STRING_ARG: {
if (localString) free(localString);
localString = strdup((char*)generic);
break;
}
case ADI_COMMAND_WITH_DOUBLE_PTR_ARG: {
localPi = *((double*)generic));
break;
}
case ADI_COMMAND_WITH_STRUCT_PTR: {
memcpy(localStruct, generic, sizeof(localStruct));
break;
}
}
}
其他命令(例如我添加的假命令)将能够以多种方式使用通用参数,例如整数或其他指针类型。
该调用的文档(VisualDSP++ 5.0 Device Drivers and System Services Manual for Blackfin® Processors)实际上支持这一点,其中指出:
ADI_STDIO_RESULT adi_stdio_ControlDevice (
ADI_STDIO_DEVICE_HANDLE hStdioDevice,
uint32_t nCommandID,
void *const pValue
);
: : :
pValue
: 执行命令所需的参数。根据命令,需要不同类型的参数。