CommonAPI

关于CommonAPI 使用说明

    程序员在开发中常用到进程间通讯,进程间通讯方式有很多种,如管道、信号量、FIFO、共享内存区,还有今天想说的CommonAPI进程间通信。
   CommonAPI C ++是用于进程间和网络通信的C ++框架。 基本目标不是提供用于进程间或网络通信(IPC)的新机制,而是定义可用于不同机制的高级C ++ API。 对于C ++开发人员而言,好处是应避免使用专有或鲜为人知的通信框架或协议的细节。
   CommonAPI C++依靠FrancaIDL来描述静态接口,根据通信协议部署参数,一起组建完整的实例依赖关系模型。目的是封装通信协议和相邻的中间件,使应用程序的C++接口独立于底层IPC堆栈。也就是IPC Common API允许针对开发的应用程序(即使用C++的客户端和服务器)可以与不同的IPC后端链接(someip,或D-Bus),而无需更改应用程序代码。因此,为使用特定IPC X(例如someip)的系统开发的组件可以轻松地部署到另一个使用IPC Y(例如D-Bus)的系统,只需要交换IPC Common API后端(someip或D-Bus),而无需重新编译应用程序代码。实际的接口定义将使用Franca IDL创建(*.fild文件)。而各项部署根据部署文件定义(*.fdepl文件)。

CommonAPI的基本原理
CommonAPI C++分为独立于中间件的部分(CommonAPI Core,仅仅指CommonAPI接口)和特定于中间件的部分(CommonAPI Binding,用于选择使用的IPC协议的代码)。
CommonAPI将接口描述语言Franca IDL用于接口规范(逻辑接口规范,.fidl文件)。Franca IDL的代码生成的是CommonAPI的组合部分。主要指逻辑接口的变量部分,那是接口的一部分,它取决于Franca IDL文件中的规范(数据类型,数组,枚举和就基础知识,包括属性,方法,回调,错误处理,广播)。
CommonAPI C++ binding的代码生成器需要特定于中间件的参数(部署参数,例如String数据类型的编码/解码格式)。这些参数在Franca部署文件(
.fdepl)中定义。主要独立于接口规范。
CommonAPI的用户API分为两部分:
基于FrancaIDL的生成部分,其中包含与FrancaIDL文件的类型,属性和方法有关的API函数。也就是根据*.fidl文件生成的API函数。
“公共”部分(Runtime API),其中包含用于加载运行时环境,创建proxy等的API函数。也就是根据*.fidl文件与*.fdepl文件生成的代码中所包含的头文件所链接的库(CommonAPI lib files + CommonAPI someip/d-bus lib files)。
CommonAPI C++的元素组合
用户API的绝大多数是CommonAPI的生成部分,CommonAPI Core和IPC堆栈之间没有直接关系,CommonAPI binding的生成代码具有CommonAPI其他部分的所有接口。
CommonAPI基本的工作流程
应用程序开发人员的工作流程如下:
创建具有方法和属性的接口规范的FrancaIDL文件。通过启动CommonAPI代码生成器为客户端和服务端生成代码。通过实现所生成框架中的方法来实现服务;或设置为默认实现。在应用程序中通过创建proxy并使用proxy调用这些方法来实现客户端。

### CommonAPI 中的 Attributes 使用与定义 在嵌入式系统和汽车领域中,CommonAPI 是一种广泛使用的框架,用于实现服务接口标准化以及跨平台通信。以下是关于 **CommonAPI 的 Attributes 定义及其用法** 的详细介绍。 #### 1. 属性 (Attributes) 的基本概念 在 CommonAPI 中,属性(Attribute)是一种数据结构,表示对象的状态或特性。它通常是一个可读写的数据字段,允许客户端通过调用来获取其当前值或者设置新值。这种机制简化了状态管理并增强了系统的灵活性[^5]。 - **特点**: - 可以被订阅以便实时通知变化。 - 支持同步访问模式。 ```cpp // 示例代码展示如何声明一个 Attribute 并对其进行操作 commonapi::SomeIP::ProxyBuilder<myInterface> proxyBuilder(someConnection); std::shared_ptr<myInterfaceProxy> myProxy = proxyBuilder.build(); // 获取某个 attribute 值 myProxy->getAttributeValue(myCallback); // 设置某个 attribute 新值 myProxy->setAttributeValue(newValue, setCallback); ``` #### 2. 数据绑定与更新逻辑 当开发者利用 CommonAPI 创建一段程序时,可以将某些变量映射成外部可见的 `attribute` 。每当这些内部变量发生变化时,所有监听该 `attribute` 的组件都会收到即时的通知[^6]。 例如,在车辆控制单元之间共享速度信息的情况下: - 发布者定期更新代表车速的数值; - 订阅方则依据接收到的新值执行相应动作比如调整巡航设定。 此过程体现了分布式架构下高效协作的优势所在。 #### 3. 错误处理及边界条件考虑 尽管上述功能强大便捷,但在实际应用过程中仍需注意可能出现的各种异常状况,如网络中断、超时未响应等问题。因此建议采取如下措施来增强健壮性: - 实施重试策略应对短暂连接失败; - 设定合理的时间限制防止无限期等待答复. 以上方法有助于构建更加稳定可靠的车载信息系统解决方案[^7]. ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值