gpt4 book ai didi

c++ - 宏在 C 中编译,但在 C++ 中不编译(MSP432 BSL 调用)

转载 作者:太空宇宙 更新时间:2023-11-04 01:16:26 24 4
gpt4 key购买 nike

我正在尝试在 TI MSP432P401R 设备上调用 BSL(引导加载程序)。以下宏在 C 中编译正确,但在使用 C++ 时失败,并出现错误“函数参数过多”。C++ 预处理器/编译器有哪些不同之处?

/******************************************************************************
* BSL *
******************************************************************************/
#define BSL_DEFAULT_PARAM ((uint32_t)0xFC48FFFF) /*!< I2C slave address = 0x48, Interface selection = Auto */
#define BSL_API_TABLE_ADDR ((uint32_t)0x00202000) /*!< Address of BSL API table */
#define BSL_ENTRY_FUNCTION (*((uint32_t *)BSL_API_TABLE_ADDR))

#define BSL_AUTO_INTERFACE ((uint32_t)0x0000E0000) /*!< Auto detect interface */
#define BSL_UART_INTERFACE ((uint32_t)0x0000C0000) /*!< UART interface */
#define BSL_SPI_INTERFACE ((uint32_t)0x0000A0000) /*!< SPI interface */
#define BSL_I2C_INTERFACE ((uint32_t)0x000080000) /*!< I2C interface */

#define BSL_INVOKE(x) ((void (*)())BSL_ENTRY_FUNCTION)((uint32_t) x) /*!< Invoke the BSL with parameters */

int main()
{
BSL_INVOKE(BSL_UART_INTERFACE);
}

最佳答案

在 C 中,类型为 void f() 的函数表示接受任何参数的函数 - 这在 C 中是过时的风格,但仍然允许。

在 C++ 中,void f() 表示一个等价于 void f(void) 的函数,因此您不能将任何参数传递给它。

你不应该在 C 和 C++ 中使用这一行:

((void (*)())BSL_ENTRY_FUNCTION)((uint32_t) x)

将它以及函数声明更改为:

((void (*)(uint32_t))BSL_ENTRY_FUNCTION)((uint32_t) x)

关于c++ - 宏在 C 中编译,但在 C++ 中不编译(MSP432 BSL 调用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57817746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com