(void *)57600在C中的返回值

问题描述 投票:1回答:2

我正在读取UART外设的源代码,并且具有以下功能:

eResult = adi_stdio_ControlDevice (hSTDIOUART,
    ADI_STDIO_COMMAND_SET_UART_BAUD_RATE, (void *)57600);

此功能用于连接UART,数字57600为波特率。我不了解(void*)57600的含义。

我认为这可能是指向const的指针,并且(void*)57600的返回值为57600。当我们使用(void*)57600时,是否表示我们正在创建一个指向57600值的指针?

以及为什么我们必须使用(void*)57600

pointers embedded void uart blackfin
2个回答
2
投票

不完全是。 (void *)57600的“返回值”(之所以引用,是因为它实际上不是从函数返回的,而是转换的结果),只是将值57600视为(或换句话说,转换为)a无效指针。

并且,尽管您实际上是在将C0转换为void指针,但几乎可以肯定它不会被用作指针。 57600的原型更有可能具有通用参数(一个可以用于很多事情的参数)。设备控制功能特别容易做到这一点,因为它们在多种设备上通用,因此您可能必须给调用提供多种类型。您将[[可能

发现,对于用于设置波特率的命令,在使用它之前,它只是简单地将其转换为另一端的整数值,例如:

adi_stdio_ControlDevice

其他命令(例如我添加的伪命令)将能够以多种方式使用泛型参数,例如整数或其他指针类型。

该调用的文档(VisualDSP ++ 5.0设备驱动程序和Blackfin®处理器的系统服务手册)实际上支持该调用,其中指出:


[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; } } } ADI_STDIO_RESULT adi_stdio_ControlDevice (ADI_STDIO_DEVICE_HANDLE hStdioDevice,uint32_t nCommandID,void *const pValue);: : ::执行命令所需的参数。

取决于命令,需要不同类型的参数。

我已经阅读了Blackfin Processor的文档,现在看起来更清晰了。值57600是UART连接的波特率,当我们编写(void *)57600时,这意味着我们正在将值57600强制转换为void指针。在函数adi_stdio_ControlDevice()中,输入参数的值将为57600,并且它是一个空指针。那么,为什么我们不直接使用值57600?原因是需要adi_stdio_ControlDevice()函数,它需要一个void指针,它将“处理”值57600作为指针。正如@paxdiablo先生在回答中所说:“执行命令需要参数。根据命令,需要使用不同类型的参数。”出于详细原因,我们必须阅读有关函数adi_stdio_ControlDevice()和Analog Device的“ ADI_STDIO_COMMAND”的更多信息。我已经看过了,但是我似乎很难理解。我认为此API不好。

© www.soinside.com 2019 - 2024. All rights reserved.