本文仍然以 搭建ECU 应用层软件模型的一个例子1 (qq.com) 中所提到计算车辆的滚动阻力,空气阻力和坡道阻力模型为例,如下所示:
搭建的模型如下所示:
假如我们不做任何自动生成代码的配置,直接去生成代码,将会报一些错误,如下所示:
1 自动生成代码的最基本配置
包含模型的主要逻辑和算法实现。
该文件中的代码直接对应于 Simulink 模型中的各个模块和连接。
定义了模型的接口,包括函数声明和数据结构。
用于在其他文件中引用模型的函数和数据。
包含模型内部使用的私有数据和函数声明。
通常用于隐藏模型的内部实现细节。
定义了模型中使用的各种数据类型。 例如,定义了结构体、枚举类型等,确保数据的一致性和可读性。
其他文件不做介绍,因为对于ECU应用软件几乎不会使用,而上面这四个文件,主要关注点在模型核心应用文件 (模型名.c),因此下面这个文件进行说明。
2 关于模型名.c代码
最开始的部分代码内容有:
预处理指令,包括用于包含头文件(使用 #include 指令包含标准库或其他头文件)和宏定义等(使用 #define 指令定义常量或宏函数,这里没有); 全局声明,即在函数之外声明全局变量(在函数之外声明的变量,可以在整个源文件中访问)和函数原型(声明函数的返回类型、名称和参数列表,以便在其他地方调用,这里也没有); 变量和函数定义,声明并初始化变量,定义实现特定功能的函数。如下所示:
然后是三个入口函数,这些函数负责模型的初始化、执行和终止。先看:
模型执行函数 (model_name_step),其功能执行模型中的各个模块,计算新的输出,如下所示:
模型初始化函数 (model_name_initialize),其功能是初始化模型中的数据和状态变量,生成如下:
模型终止函数 (model_name_terminate),其功能是释放模型中分配的资源和清理工作,这里未对其做配置,因此函数里面没有代码内容。
总的来说,对于ECU应用层软件来说,模型终止函数不会使用到,后续将取消其生成,而模型执行函数和模型初始化函数需要。这是我们仅作求解器配置生成的代码,如果细究执行函数和初始化函数,会发现有很多代码内容不是我们想要的,因此对于要生成符合ECU应用层软件的代码,又需要做哪些自动代码生成的配置?
3 ECU应用层软件代码的生成配置
这里为什么选择 Embedded Coder 进行代码生成,而不是其他?其原因涉及代码质量、性能优化、标准符合性、开发效率和安全性等。具体表现在:
1)生成高质量的代码
可读性:Embedded Coder 生成的代码具有良好的可读性,易于理解和维护。
简洁性:生成的代码通常更简洁,减少了冗余和不必要的代码,有利于代码的维护。
一致性:生成的代码遵循一致的编码风格和规范,有助于团队协作和代码审查。
2)性能优化
执行效率:Embedded Coder 通过高级优化技术生成高效的代码,提高执行速度,这对于实时控制系统尤为重要。
内存使用:优化后的代码可以更有效地使用内存,减少内存占用,这对于嵌入式系统中的资源限制非常关键。
实时性:生成的代码适合实时系统,能够在预定的时间内完成任务,确保系统的响应性和可靠性。
3)符合行业标准
AUTOSAR:Embedded Coder 支持 AUTOSAR 标准,这是汽车行业中广泛采用的标准,确保代码的标准化和互操作性。 MISRA C:生成的代码符合 MISRA C 标准,确保代码的安全性和可靠性,这对于汽车控制系统至关重要。 ISO 26262:支持 ISO 26262 ,确保代码符合功能安全要求,提高系统的安全性。
4 小结
定步长,离散
选择Embedded coder
取消main函数生成
取消terminate函数生成
通过上述操作,生成的代码文件和代码中的Step和Initialize函数基本上ECU应用层软件所需要的。当然要生成符合量产的ECU应用层软件代码,还需要做更多的配置,欢迎关注下篇文章。
创作不易,欢迎关注点赞再看收藏!
汽车研发交流群,有兴趣的朋友请添加群主:prOmiseyes,备注:公司+职务入群。仅限汽车从业人员。