我使用嵌入式软件,遇到了(以及从这个模型中复制过的)我在大学时从未学过的界面(新毕业).它允许代码库在library function不知道library用它编译的内容的情况下进行调用,假设它们都具有相同的内容function.下面的例子只显示了一个radio1,但是假设有一个radio2,radio3等通过makefile.
在编译中,library我们执行以下操作.在.c源文件中,function声明和接口struct:
// function bodies that do things
void radio1_init_radio(void) {}
void radio1_calibrate_radio(void) {}
// populate global tune interface
const struct tune_if_t tune_if =
{
.init_radio = radio1_init_radio,
.calibrate_radio = radio1_calibrate_radio
}
Run Code Online (Sandbox Code Playgroud)
然后,在.h中我指定function pointers:
struct tune_if_t
{
void (*init_radio) (void);
void (*calibrate_radio) (void);
};
extern const struct tune_if_t tune_if;
Run Code Online (Sandbox Code Playgroud)
这允许库外的系统在function不知道编译和链接哪个无线电库的情况下调用:
int main( void )
{
// interface calls
tune_if.init_radio();
tune_if.calibrate_radio();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
这有技术术语吗?我现在很难快速向另一位工程师解释.
这是完成此类行为的最佳方法吗?
这种方法有什么问题吗?