ECU 应用层软件模型如何自动生成代码2

文摘   2024-11-18 07:22   上海  
ECU 应用层软件模型系列文章不断更新中,从零开始教你做ECU应用层软件模型开发:

本文仍然以 搭建ECU 应用层软件模型的一个例子1 (qq.com) 中所提到计算车辆的滚动阻力,空气阻力和坡道阻力模型为例,如下所示:

搭建的模型如下所示:

假如我们不做任何自动生成代码的配置,直接去生成代码,将会报一些错误,如下所示:

1 自动生成代码的最基本配置

根据上面错误的修复提示,接下来我们做一个最基本的配置,即在模型设置的求解器中,配置类型为定步长,求解器为离散,步长为10ms,如下所示。

然后进行自动生成代码(按组合键Ctrl+B),结果可以生成代码,如果不会自动打开报告,可通过下图所示操作打开:

通过报告可以看到,左侧是生成的文件,包括:
1)模型核心应用文件 (模型名.c)
  • 包含模型的主要逻辑和算法实现。

  • 该文件中的代码直接对应于 Simulink 模型中的各个模块和连接。

2)模型头文件 (模型名.h)
  • 定义了模型的接口,包括函数声明和数据结构。

  • 用于在其他文件中引用模型的函数和数据。

3)私有头文件 (模型名_private.h)
  • 包含模型内部使用的私有数据和函数声明。

  • 通常用于隐藏模型的内部实现细节。

4)类型定义文件 (模型名_types.h)
  • 定义了模型中使用的各种数据类型。
  • 例如,定义了结构体、枚举类型等,确保数据的一致性和可读性。

其他文件不做介绍,因为对于ECU应用软件几乎不会使用,而上面这四个文件,主要关注点在模型核心应用文件 (模型名.c),因此下面这个文件进行说明。

关于模型名.c代码

最开始的部分代码内容有:

  • 预处理指令,包括用于包含头文件(使用 #include 指令包含标准库或其他头文件)和宏定义等(使用 #define 指令定义常量或宏函数,这里没有);
  • 全局声明,即在函数之外声明全局变量(在函数之外声明的变量,可以在整个源文件中访问)和函数原型(声明函数的返回类型、名称和参数列表,以便在其他地方调用,这里也没有);
  • 变量和函数定义,声明并初始化变量,定义实现特定功能的函数。如下所示:

然后是三个入口函数,这些函数负责模型的初始化、执行和终止。先看:

  • 模型执行函数 (model_name_step),其功能执行模型中的各个模块,计算新的输出,如下所示:

  • 模型初始化函数 (model_name_initialize),其功能是初始化模型中的数据和状态变量,生成如下:

  • 模型终止函数 (model_name_terminate),其功能是释放模型中分配的资源和清理工作,这里未对其做配置,因此函数里面没有代码内容。

总的来说,对于ECU应用层软件来说,模型终止函数不会使用到,后续将取消其生成,而模型执行函数和模型初始化函数需要。这是我们仅作求解器配置生成的代码,如果细究执行函数和初始化函数,会发现有很多代码内容不是我们想要的,因此对于要生成符合ECU应用层软件的代码,又需要做哪些自动代码生成的配置?

3 ECU应用层软件代码的生成配置

在上述配置了定步长离散的基础上,针对ECU应用层软件模型的自动代码生成,需要继续配置,在配置参数左侧的代码生成,把系统目标文件配置为Embedded Coder(ert.tlc),这样就可以生成嵌入式C代码。

这里为什么选择 Embedded Coder 进行代码生成,而不是其他?其原因涉及代码质量、性能优化、标准符合性、开发效率和安全性等。具体表现在:

1)生成高质量的代码

  • 可读性:Embedded Coder 生成的代码具有良好的可读性,易于理解和维护。

  • 简洁性:生成的代码通常更简洁,减少了冗余和不必要的代码,有利于代码的维护。

  • 一致性:生成的代码遵循一致的编码风格和规范,有助于团队协作和代码审查。

2)性能优化

  • 执行效率:Embedded Coder 通过高级优化技术生成高效的代码,提高执行速度,这对于实时控制系统尤为重要。

  • 内存使用:优化后的代码可以更有效地使用内存,减少内存占用,这对于嵌入式系统中的资源限制非常关键。

  • 实时性:生成的代码适合实时系统,能够在预定的时间内完成任务,确保系统的响应性和可靠性。

3)符合行业标准

  • AUTOSAR:Embedded Coder 支持 AUTOSAR 标准,这是汽车行业中广泛采用的标准,确保代码的标准化和互操作性。
  • MISRA C:生成的代码符合 MISRA C 标准,确保代码的安全性和可靠性,这对于汽车控制系统至关重要。
  • ISO 26262:支持 ISO 26262 ,确保代码符合功能安全要求,提高系统的安全性。
另外,为了自动打开代码生成报告,再做一个配置,在模型设置左侧的代码生成的报告中,勾选创建代码生成报告和自动打开报告,如下所示:

再次进行自动生成代码(按组合键Ctrl+B),生成代码情况如下:

注意观察相比与之前很有文件不会再生成,但明显生成一个ert_main.c的C文件。该文件含有一个主函数,调用模型初始化函数和模型step函数。对于ECU应用层软件模型的生成代码,这个主函数完全没有必要,因为ECU软件是通过底层软件配置好操作系统和任务调度,然后为模型初始化函数和模型step函数提供接口函数,而不需要用Simulink生成。
因此,可以通过配置不生成这个主函数,以减少生成代码所用的时间。取消main的生成操作如下所示,模型设置左侧的代码生成的模板,取消勾选生成示例主程序这个选项。

另外,之前也提到模型终止函数也是不需要的,也可以通过配置取消该函数生成,模型设置左侧的代码生成的接口,取消勾选需要终止函数这个选项。
再Ctrl+B进行代码生成如下,不再生成terminate函数,只生成Step和Initialize函数。

4 小结

以上就是关于ECU应用层软件模型自动代码生成的最基本配置,即:
  • 定步长,离散

  • 选择Embedded coder

  • 取消main函数生成

  • 取消terminate函数生成

通过上述操作,生成的代码文件和代码中的Step和Initialize函数基本上ECU应用层软件所需要的。当然要生成符合量产的ECU应用层软件代码,还需要做更多的配置,欢迎关注下篇文章。



创作不易,欢迎关注点赞再看收藏


汽车研发交流群,有兴趣的朋友请添加群主:prOmiseyes,备注:公司+职务入群。仅限汽车从业人员。

谦益行
分享汽车研发日常,助力你我共同成长。
 最新文章