第四章:Simulink配置与代码生成

好,咱们今天聊聊Embedded Coder的配置和AUTOSAR代码生成。说实话,这块内容我当年刚接触时也踩过不少坑。你想想看,Simulink模型画得再漂亮,如果代码生成配置不对,那一切都是白搭。

4.1 Embedded Coder基础配置

Embedded Coder说白了就是把Simulink模型变成可部署的C代码。我个人习惯在开始任何项目前,先把这几个关键配置搞定:

  • 系统目标文件:选择ert.tlc(Embedded Real-Time)
  • 语言设置:C语言(别选C++除非你真有需求)
  • 代码接口打包:我一般选"Nonreusable function"

核心配置路径

Configuration Parameters → Code Generation → Target selection

我在项目中遇到过一个问题:有同事选了grt.tlc(Generic Real-Time),结果生成的代码里带了一大堆调试用的printf语句。嗯,这在量产ECU里是绝对不能接受的。所以记住,量产项目一定要用ert.tlc

4.2 AUTOSAR代码生成选项

这部分是重点。AUTOSAR代码生成不是简单点个按钮就完事的。你需要理解几个关键概念:

配置项 说明 我的建议
AUTOSAR Schema版本 决定ARXML的格式标准 用4.2.2或4.4.0,别用太老的
SWC类型 Application SWC或SensorActuator SWC 大部分情况用Application SWC
Runnable命名规则 决定函数名生成方式 建议用ComponentName_RunnableName

配置路径在这里:

Configuration Parameters → Code Generation → AUTOSAR
  → AUTOSAR Schema Version: 4.2.2
  → Generate AUTOSAR Description: 勾选
  → SWC Type: Application SWC

我的小技巧:在配置AUTOSAR选项时,先把"Generate AUTOSAR Description"勾上,然后生成一次代码看看ARXML文件。如果报错,多半是模型里用了AUTOSAR不支持的模块。

4.3 生成ARXML的实战步骤

好了,咱们走一遍实际流程。我假设你已经有一个简单的Simulink模型了。

  1. 设置AUTOSAR接口:在模型里添加Inport和Outport,给它们起好名字。我个人习惯用Can_InputSpeed_Output这种命名方式。
  2. 配置Runnable:每个Runnable对应一个函数。我一般把周期任务放在InitRun里。
  3. 生成代码:按Ctrl+B,等着就行。

生成完成后,你会看到这些文件:

model_name.c          # 实现代码
model_name.h          # 头文件
model_name.arxml      # AUTOSAR描述文件
model_name_ptypes.h   # 数据类型定义

注意:生成的ARXML文件里包含了SWC的完整描述,包括端口、接口、Runnable等信息。这个文件是要交给AUTOSAR配置工具(比如Vector DaVinci、EB tresos)去用的。我曾经见过有人手动修改ARXML,结果格式不对导致整个集成失败。所以,尽量别手动改。

4.4 常见问题与避坑指南

做AUTOSAR代码生成,有几个坑我帮你们提前踩过了:

  • 数据类型不匹配:Simulink里的double在AUTOSAR里可能不被支持。我建议用singleuint16
  • Runnable周期设置:在模型里用Sample Time定义周期,别在ARXML里硬编码。
  • 端口方向搞反:Inport对应RPort,Outport对应PPort。这个搞反了,集成时你会哭的。

我曾经有一次,因为端口方向搞反,导致生成的ARXML里SWC的接口全是反的。当时集成工程师找我,我查了半天才发现是模型里Inport和Outport画反了。嗯,从那以后我每次生成前都会仔细检查一遍端口方向。

4.5 知识体系结构图

下面这张图是我自己总结的,把整个流程串起来:

Simulink AUTOSAR代码生成流程 1. 模型准备 定义端口、数据类型 2. Embedded Coder配置 选择ert.tlc、语言设置 3. AUTOSAR配置 Schema版本、SWC类型 4. 生成代码 Ctrl+B 生成 5. 输出文件 .c, .h, .arxml 6. 集成验证 导入ARXML到配置工具 关键输出文件说明 • model_name.c - 实现代码(Runnable函数体) • model_name.h - 头文件(函数声明、数据类型) • model_name.arxml - AUTOSAR描述(SWC、端口、接口) • model_name_ptypes.h - 平台类型定义

总结一下:整个流程其实不复杂,但每一步都有细节。我建议你第一次做的时候,先拿一个简单的模型练手,比如一个加法器或者一个PID控制器。等流程跑通了,再上复杂的模型。

好了,关于Simulink配置与代码生成,我就说这么多。记住,配置是基础,ARXML是桥梁,代码是最终产物。这三者缺一不可。

专注资料整理