idl文件和fidl文件解析总结(idl、fidl文件和工具结合生成头文件和源文件)

DDS中idl文件解析

DDS中的idl文件所代表的含义:
例如:

module HelloWorldData {
	struct Mag {
		long userID;
		string message;
	};
};

在这个文件中,定义了一个名为HelloWorldData的模块,该模块包含了一个名为Mag的结构体。结构体Mag包含两个成员变量,一个是名为userID的长整型变量,另一个是名为message的字符串变量

这个文件的作用是定义了DDS中的数据类型,用于在系统中传递和存储数据。通过定义结构体Mag,我们可以创建包含userID和message数据的实例,并将其用于DDS中的发布和订阅机制。

需要注意的是,这个文件中只定义了数据类型的结构,具体的数据处理逻辑和功能实现需要在其他文件中完成,例如生成的HelloWorldPublisher.cpp和HelloWorldSubscriber.cpp文件。


SOMEIP中的fidl文件解析

SOMEIP中.fidl文件:

//package用于定义包名,表示该接口所属的包或命名空间,目的就是为了在不同的服务接口下不会冲突
package commonapi
//定义接口名称、版本号以及接口属性:该fidl文件定义了一个HelloWorld的接口
interface HelloWorld {
    //version语句用于指定接口的版本号:major 1 minor 0 表示接口的主版本号为1,次版本号为0,也就是说该接口的版本号为1.0
    version { major 1 minor 0 }
    //定义了一个名为:YYYStruct 的结构体类型,包含两个UInt64类型的字段
    struct YYYStruct{
        UInt64 XXX_timestamp
        UInt64 YYYTimeStamp
    }

    //定义了一个名为:XXXCTimeData的方法,用来发送当前UTC时间数据
    //该方法的通信方式:通信不回复
    //fireAndForget是请求不回复的这种通信方式的方法标识符
    method XXXCTimeData fireAndForget{
        in {
            YYYStruct CurrentUtcTimeData
        }
    }
    // 定义了一个方法用来获取初始化时间,方法名为:SoC1GetDataInitTime,该方法有输入参数和输出参数,用于传递数据
    // 该方法的通信方式:通信回复
    method SoC1GetDataInitTime{
        in 通过参数将数据传递给别人,out 通过参数将数据带回来
        // 输入参数为UInt8类型的getInitTime
        in {
            UInt8 getInitTime
        }
        // 输出参数为UInt64l类型的returnInitTime
        out {
            UInt64 returnInitTime
        }
    }
    //定义了一个名为:sendUtcTimeData的广播消息,并且指定了该广播消息的输出参数为:名为CurrentUtcTimeData的YYYStruct类型的参数
    broadcast sendUtcTimeData {
        out {
            YYYStruct CurrentUtcTimeData
        }
    }
} 

protocol: 定义协议名称和版本号。
interface: 定义接口名称、版本号和接口属性。
method: 定义方法名称和方法属性。
parameter: 定义方法的输入参数。
returnvalue: 定义方法的返回值。
eventgroup: 定义事件组名称、版本号和事件组属性。
event: 定义事件名称和事件属性。
field: 定义参数或返回值的字段。
enumeration: 定义枚举类型。
constant: 定义常量。
struct: 定义结构体类型。
array: 定义数组类型。
map: 定义映射类型。
set: 定义集合类型。
function: 定义函数类型。
每个语句可以有不同的属性和参数,用于描述接口、方法、参数、返回值等的详细信息。
使用这些语句可以定义出完整的服务接口,包括接口定义、方法定义、参数定义等等。
这些定义可以被编译器解析并生成对应的代码,用于实现和使用服务接口。

idl文件与idlc文件结合产生.cpp .hpp文件

idlc文件的作用以及如何与idl文件结合产生.cpp .hpp文件可以参考此文:

C版本CycloneDDS源码在X86架构Linux系统上编译产生idlc执行文件的作用示例(cyclonedds-master/build/bin/idlc)

# fidl文件与code_generator结合产生 .hpp文件

commonapi someip支持数据序列化,所以使用的工具为:commonapi_core_generator_Linux_x86_64

执行指令:

./commonapi_core_generator_Linux_x86_64 -dest ../../src_gen -sk ../../HelloWorld.fidl,其中:

-desk < path > :指定产生的头文件.hpp存放的路径

-sk :指定吃啥呢还给你头文件的命名规则,../../HelloWorld.fidl是指以这个目录下的fidl文件的名去命名,即头文件为HelloWorld.hpp

fidl文件与code_generator结合产生 .hpp文件时需要注意的一点(简直离谱)

请添加图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江南霹雳堂雷家雷无桀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值