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