如何让 Source Insight 识别 AUTOSAR 宏定义 FUNC

有很多从事汽车电子行业的软件工程师在使用Source Insight阅览Classic AUTOSAR协议栈源码的时候,

发现函数名无法解析,基本上都变成了FUNC。

  • 先说原因:

AUTOSAR的协议栈为了实现多平台和编译器兼容,大量使用宏定义来代替关键字。

函数,指针,返回值,等等。这样可以实现代码对编译器的解耦和复用。

这种标准或者平台化设计的代码,真的和目标就是一亩三分地开发的模式不一样。为了可扩展和复用解耦,增加了很多设计。

  • 解决方法:

Source Insight在 C:\Users\你的用户名\Documents\Source Insight 4.0下面有一个C.tom。在里面可以自定义一些宏展开,

让Source Insight解析,在分析符号的时候进行替换。

注意:目前发现好像不支持宏的嵌套使用,也就是说不可避免的,有一些嵌套使用的宏定义会解析错误。常见于指针的使用解析。

比如FUNC里传入参数是个用宏描述的常量指针,就会被误识别。

宏定义的来源一般放在各种文件名带"compiler"的头文件下,搜索“#define FUNC”这样的字符串差不多就可以搜索到。

例如:

#define FUNC(rettype, memclass) rettype

#define FUNC_P2CONST(rettype, ptrclass, memclass) const rettype *

#define FUNC_P2VAR(rettype, ptrclass, memclass) rettype *

#define P2VAR(ptrtype, memclass, ptrclass)     ptrtype *

#define P2CONST(ptrtype, memclass, ptrclass)  const ptrtype *

#define CONSTP2VAR(ptrtype, memclass, ptrclass) ptrtype * const

#define CONSTP2CONST(ptrtype, memclass, ptrclass) const ptrtype * const

#define P2FUNC(rettype, ptrclass, fctname) rettype (* fctname)

#define CONSTP2FUNC(rettype, ptrclass, fctname) rettype (* const fctname)

#define CONST(consttype, memclass) const consttype

#define VAR(vartype, memclass) vartype

#define P2P2VAR(ptrtype, memclass, ptrclass) ptrtype **

这样只需要在C.tom末尾添加上述内容,去掉前面的#define就可以了

例如:

FUNC(rettype, memclass) rettype
FUNC_P2CONST(rettype, ptrclass, memclass) const rettype *
FUNC_P2VAR(rettype, ptrclass, memclass) rettype *
P2VAR(ptrtype, memclass, ptrclass) 	ptrtype *
P2CONST(ptrtype, memclass, ptrclass)  const ptrtype *
CONSTP2VAR(ptrtype, memclass, ptrclass) ptrtype * const
CONSTP2CONST(ptrtype, memclass, ptrclass) const ptrtype * const
P2FUNC(rettype, ptrclass, fctname) rettype (* fctname)
CONSTP2FUNC(rettype, ptrclass, fctname) rettype (* const fctname)
CONST(consttype, memclass) const consttype
VAR(vartype, memclass) vartype
P2P2VAR(ptrtype, memclass, ptrclass) ptrtype **
  • 还有别的宏?

上述的内容比较常用,下面讲讲个性化的。

可能还会遇到各种各样奇奇怪怪的用法,甚至还有些函数在代码里都搜索不到,实际上都可能是宏甚至是字符串拼接宏。

例如常见的:

TASK(your_task_name)

{

...

}

实际上这是一个定义在OS User Interface系列头文件中的宏,

#define Task(TaskName) void Os_Task_##TaskName(void)

在C.tom中,就可以直接写上:

Task(TaskName) void Os_Task_##TaskName(void)

修改完之后,重启source insight或者rebuild工程,可以让修改生效!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Autosar是一种开放的汽车软件架构标准,用于提供汽车电子系统的可互操作性和可重用性。它定义了汽车电子系统软件的架构和接口,可以使不同厂家开发的软件在不同平台上进行交互和协作。Autosar标准涵盖了整个汽车电子系统的各个方面,包括底层硬件接口、通信协议、应用软件等。 FuncAutosar中的一个概念,它代表着一个Autosar软件组件的功能。在Autosar的软件架构中,系统被分解成一个个的软件组件,而每个组件具有特定的功能。Func描述了组件的功能和接口,并定义了它与其他组件之间的通信和协作方式。 Source Insight是一种源代码查看和分析工具,可以帮助软件开发人员快速浏览和理解源代码的结构和逻辑。它支持多种编程语言,并提供了一系列便捷的功能,如代码高亮、跳转定义、查找引用等。 在识别Autosar Func时,Source Insight可以通过解析源代码文件来查找和识别组件的功能和接口。通过对Autosar软件组件的源代码进行分析,Source Insight可以帮助开发人员了解组件的结构和功能,并支持其在代码中的使用。开发人员可以利用Source Insight提供的功能,如查找引用、跳转定义等,来检查和修改组件的实现,以实现所需的功能。 综上所述,通过使用Source Insight工具,可以帮助识别Autosar Func,并支持对Autosar软件组件的源代码进行查看和分析,从而更好地理解和使用Autosar标准。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小羊苏C

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

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

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

打赏作者

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

抵扣说明:

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

余额充值