• 675查看
  • 0回复

[Autosar] AutoSar的Coding趣闻

[复制链接]


该用户从未签到

发表于 21-1-2024 10:47:05 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


01

避免无用变量的编译warning

想必大家编译代码经常能看到这种warning:

AutoSar的Coding趣闻w1.jpg

但是有时候在开发阶段又不想直接删除,ETAS的代码是这么做的:

AutoSar的Coding趣闻w2.jpg

02

位域赋值

咱们平时如何赋初值呢,是单个挨个赋值:
A.isEventTrig = 1;
还是总体赋值呢:

A = {    .isEventTrig  = 1;    .isTriggerIpduSendWithMetadata = 1;    .isGwIpduSend = 1;};
ETAS的代码简单粗暴:

AutoSar的Coding趣闻w3.jpg

03

枚举的拼接

调试NvM的代码时,发现有些枚举值代码中搜索不到,却可以在调试器中显示出来,原来它们是这样被拼接的:

AutoSar的Coding趣闻w4.jpg

定义了如上的service bit list,然后通过##连接符拼接参数生成枚举成员,并且拼接时还有个unused参数(可以用作备注)。

04

二分法循环!

平时咱们写代码不管是for还是while,无非是做变量++来循环,而ETAS则有一种高效的快速查表方法:

AutoSar的Coding趣闻w5.jpg

不过需要注意的是,咱们查询的表里的数值需要从小到大排列或者从大到小排列,才能使用二分法循环。

05

const指针的赋值操作

如图:

AutoSar的Coding趣闻w6.jpg

如果直接写:
BlockData_st.QueueEntry_st.BlockData_pv = NvM_SrcPtr;
编译器会warning,告诉我们const被丢弃了。

AutoSar的Coding趣闻w7.jpg

使用联合体的另一个非const成员规避问题。

不过正常写代码如果需要对指针操作,可以尽量不写成const类型。曾经项目中遇到过matlab生成的代码,对const类型的结构体,使用类型*&的方式强制赋值,最后代码跑飞到没有问题的代码段,然后进入Trap。我们虽然看到的现象有点无解,也确实对没有问题的代码排查了下,但还好当时软件的改动量不大,通过git log及时查到了问题。
AutoSar的Coding趣闻w8.png


该用户从未签到

发表于 15-3-2025 11:38:00 | 显示全部楼层
关于AutoSar的Coding趣闻

一、避免无用变量的编译警告:
在开发过程中,有时会出现编译警告提示无用变量。为确保代码质量和性能,我们应处理这些警告。ETAS的做法是通过特定代码检查并标注这些变量,而非直接删除。这样可以确保代码的清晰性和可维护性。

二、位域赋值:
通常我们为结构体中的位域赋值时,会选择逐个赋值。但ETAS的代码更倾向于简洁风格,采用位操作或宏定义直接对位域进行赋值,这样做不仅简洁,还提高了代码执行效率。

三、枚举的拼接调试:
在处理枚举类型的拼接或调试时,ETAS的代码可能采用特定的宏定义或内联函数来简化操作,提高代码的可读性和维护性。同时,对于复杂的枚举操作,详细的注释和文档也是必不可少的。

总之,ETAS的代码风格注重效率和简洁性,值得我们学习和借鉴。在遵循规范的同时,也要根据实际情况灵活调整,确保代码质量和性能。
回复 支持 反对

使用道具 举报

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 19-8-2025 12:31 , Processed in 0.490727 second(s), 35 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.