软件合作开发中的接口
继续来谈谈ECU软件合作开发,这次我们说点实际的问题 —— 接口。在软件合作开发的过程中,最重要的就是双方交互接口的定义。因为双方的变量需要交互,所以在软件编译中就不可避免的会产生接口的问题。

在项目早期,双方的接口都没有开发完成,如何封闭这些接口成为了一个巨大的难题,举个最简单的例子:车速。OEM算的车速要赋值到Tier1变量中,比如有一个Interface1.c中包含如下代码:
Tier1_vehicle_speed = OEM_vehicle_speed;
如果Tier1没有OEM SW或者在OEM SW中该接口未开发完成,在Tier1这边的编译就会出现,OEM_vehicle_speed 未定义的情况。不过,在计算机中有一句至理名言:在软件中没有一个中间层解决不了的问题。

比如我们不使用Interface1.c而是定义一个Interface2.c,其中包含如下代码:
uint8 vehicle_speed = 0;
void set_vehicle_speed(uint8 x) {
vehicle_speed = x
}
uint8 get_vehicle_speed() {
return vehicle_speed;
}
观察这段代码,有如下优点:
(1)不会产生任何接口问题
(2)做到真正的黑盒,双方变量都得到的隐藏
(3)函数调用,降低了变量被非法访问的几率
比如OEM开发好了这个接口,只需调用:
set_vehicle_speed(OEM_vehicle_speed);
或者Tier1开发好了,就调用:
Tier1_vehicle_speed = get_vehicle_speed();
无论哪方都可以直接编译通过,不会产生任何接口相关的编译报错。当然,只有这两个函数都被调用,才相当于变量的赋值。

氨气“ 携手进步 共同成长 ”
阅读原文