我使用嵌入式软件,遇到了(以及从这个模型中复制过的)我在大学时从未学过的界面(新毕业).它允许代码库在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 …Run Code Online (Sandbox Code Playgroud) 在 a 中makefile,我试图检查 fileA 的修改时间是否比 fileB 更新的时间长。使用之前的一些帖子(this和this)作为参考,我想出了这个来尝试将自上次文件修改以来的时间存储为变量:
(我宁愿这是在make配方之外的函数中,但一次一个。)
.PHONY: all clean
all : (stuff happens here)
radio :
BASE_MOD_TIME="$( expr $(date +%s) - $(date +%s -r src/radio_interface/profile_init.c) )"
@echo "$(BASE_MOD_TIME)"
Run Code Online (Sandbox Code Playgroud)
我以为我会将expr命令的输出分配给一个变量BASE_MOD_TIME,但输出是:
bash-4.1$
BASE_MOD_TIME=""
echo ""
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?保存输出的简单尝试ls -l也没有像这样工作。