使用类似C函数的宏作为函数别名

使用类似C函数的宏作为函数别名,c,macros,C,Macros,我正在用C编写一个嵌入式应用程序,使用来自两个不同供应商的SDK。每个SDK都有自己的模块来处理串行(SPI)功能,它们相互干扰。我已经编写了自己的SPI模块,并希望改用我的函数 我不想通过替换所有函数调用来修改SDK,而是想使用类似函数的宏来使旧调用映射到新函数 我的函数反映了它们的功能,不过有一个额外的参数来声明我正在使用的设备。例如: 供应商的SDK功能声明: NTRXSPIRead(uint8_t地址、uint8_t*缓冲区、uint8_t len) 我的职能: spiBurstRead

我正在用C编写一个嵌入式应用程序,使用来自两个不同供应商的SDK。每个SDK都有自己的模块来处理串行(SPI)功能,它们相互干扰。我已经编写了自己的SPI模块,并希望改用我的函数

我不想通过替换所有函数调用来修改SDK,而是想使用类似函数的宏来使旧调用映射到新函数

我的函数反映了它们的功能,不过有一个额外的参数来声明我正在使用的设备。例如:

供应商的SDK功能声明:

NTRXSPIRead(uint8_t地址、uint8_t*缓冲区、uint8_t len)

我的职能:

spiBurstRead(设备类型、uint8\u t地址、uint8\u t*缓冲区、uint8\u t len)

我提议的解决办法:

#定义NTRXSPIRead(add,buff,len)spiBurstRead(DEVICETYPE,(add),(buff),(len))


这样行吗?有更好的方法吗?

我试过了,效果很好!下面是一个简单的函数作为示例,尽管问题中发布的函数也有效

SDK功能:

NTRXSPIWriteByte(uint8_t地址,uint8_t缓冲区)

我的职能:

void spiWriteByte(设备类型,uint8字节地址,uint8字节结束)

#define语句:

#定义NTRXSPIWriteByte(add,buff)spiWriteByte(SPI_NANO,(add,(buff))

查看反汇编程序,对函数的直接调用如下所示:

spiWriteByte (SPI_NANO, 0x01, 0xDB); // Address=0x01, Data 0xDB
LDI  R24,0x02  Load immediate // Note: "SPI_NANO" is enumerated as = 2
LDI  R22,0x01  Load immediate
LDI  R20,0xDB  Load immediate
CALL 0x00003519  Call subroutine
SDK发出的调用:

NTRXSPIWriteByte (0x01, 0xDB);
LDI  R24,0x02  Load immediate
LDI  R22,0x01  Load immediate
MOV  R20,0xDB  Load immediate
CALL 0x00003519  Call subroutine

请注意,它将DEVICETYPE传递到目标函数中,即使SDK中不存在它。好极了

它应该起作用吗?IDK,试试看!这可能不起作用的一个原因是,如果代码将函数指针传递给供应商的SDK函数,因为A)预处理器将无法替换这些实例(它们与宏调用不同)和B)您已更改了函数类型。@ValekHalfHeart Ha!毫无疑问:)在代码准备好开始调试之前需要几天时间,我想知道是否有更好的方法可以遵循。@Iwillnotexistidnotexist谢谢!这就是我要查找的信息。您可能会与SDK的
*.h
文件定义的宏发生冲突。