将宏定义传递给以引用作为参数的函数
pass macro definition to function taking reference as an argument
我们如何将#defined 宏作为函数接受引用的参数传递给函数。
这是我尝试的错误方式:
#define RST_REQ_REG 0x04
#define RESET_CMD 0x01
write_register(RST_REQ_REG, RESET_CMD, 1);
// Decleration of write_reg is
void write_register(uint8_t regAddr, uint8_t *writeByte, uint8_t writeByteLen);
谢谢!
你不能。 write_register
接受一个 指针 作为第二个参数,句点。
你可能想要这个:
#define RST_REQ_REG 0x04
#define RESET_CMD 0x01
uint8_t cmdbuffer[1] = {command};
write_register(RST_REQ_REG, cmdbuffer, 1);
也许您想将其包装到另一个函数中:
void write_command(uint8_t regAddr, uint8_t command)
{
uint8_t cmdbuffer[1] = {command};
write_register(regAddr, cmdbuffer, 1);
}
...
write_command(RST_REQ_REG, RESET_CMD);
由于您必须将指针传递给 write_register 函数,因此您必须先将其分配给一个变量,以便为它分配存储空间。它不能作为文字传递。为什么write_register需要一个指针可能是如果你想写一个以上的字节,那么你可以传递一个数组(C中的数组只是指向数组第一个元素的指针),但如果你总是想要写 1 个字节会很烦人。
所以你需要做这样的事情:
uint8_t byteToWrite = RESET_CMD;
write_register(RST_REQ_REG, &byteToWrite, 1);
如果这种情况经常发生并且让你烦恼,你可以写一个包装函数:
static void my_write_register(uint8_t regAddr, uint8_t writeByte)
{
write_register(regAddr, &writeByte, 1);
}
那么你可以这样称呼它:
my_write_register(RST_REQ_REG, RESET_CMD);
我们如何将#defined 宏作为函数接受引用的参数传递给函数。
这是我尝试的错误方式:
#define RST_REQ_REG 0x04
#define RESET_CMD 0x01
write_register(RST_REQ_REG, RESET_CMD, 1);
// Decleration of write_reg is
void write_register(uint8_t regAddr, uint8_t *writeByte, uint8_t writeByteLen);
谢谢!
你不能。 write_register
接受一个 指针 作为第二个参数,句点。
你可能想要这个:
#define RST_REQ_REG 0x04
#define RESET_CMD 0x01
uint8_t cmdbuffer[1] = {command};
write_register(RST_REQ_REG, cmdbuffer, 1);
也许您想将其包装到另一个函数中:
void write_command(uint8_t regAddr, uint8_t command)
{
uint8_t cmdbuffer[1] = {command};
write_register(regAddr, cmdbuffer, 1);
}
...
write_command(RST_REQ_REG, RESET_CMD);
由于您必须将指针传递给 write_register 函数,因此您必须先将其分配给一个变量,以便为它分配存储空间。它不能作为文字传递。为什么write_register需要一个指针可能是如果你想写一个以上的字节,那么你可以传递一个数组(C中的数组只是指向数组第一个元素的指针),但如果你总是想要写 1 个字节会很烦人。
所以你需要做这样的事情:
uint8_t byteToWrite = RESET_CMD;
write_register(RST_REQ_REG, &byteToWrite, 1);
如果这种情况经常发生并且让你烦恼,你可以写一个包装函数:
static void my_write_register(uint8_t regAddr, uint8_t writeByte)
{
write_register(regAddr, &writeByte, 1);
}
那么你可以这样称呼它:
my_write_register(RST_REQ_REG, RESET_CMD);