贝博恩创新科技网

Embedded Coder教程如何快速上手?

Embedded Coder 综合教程

第一部分:什么是 Embedded Coder?为什么需要它?

核心概念 Embedded Coder 是 MathWorks 开发的一个专业代码生成工具箱,它位于 Simulink Coder 之上,它的核心功能是将 Simulink 模型、Stateflow 状态图、MATLAB Function 模块等,自动、高效、可靠地生成符合生产标准的、可部署在嵌入式处理器(如 ARM, Infineon, TI 等)上的 C 和 C++ 代码。

Embedded Coder教程如何快速上手?-图1
(图片来源网络,侵删)

核心优势

  • 自动代码生成: 将系统建模与底层代码实现分离,工程师可以专注于算法设计和系统验证,而无需手动编写繁琐、易错的底层代码。
  • 高质量、高效率代码: 生成的代码具有高可读性、模块化和可维护性,并且经过高度优化,代码效率接近或优于手写代码。
  • 硬件在环测试: 生成的代码可以脱离 MATLAB/Simulink 环境,作为独立的可执行文件在目标硬件(如微控制器、ECU)上运行,实现真实的硬件测试。
  • 认证支持: 提供了符合汽车行业(如 MISRA C/C++、AUTOSAR)、工业安全(如 IEC 61508)等标准的功能和报告,极大地简化了认证流程。
  • 完整的工具链: 与 MATLAB、Simulink、Stateflow 以及各种硬件工具箱(如 Support Package for ARM Processors)无缝集成,形成一个从模型到部署的完整工作流。

第二部分:核心工作流程

使用 Embedded Coder 开发嵌入式应用程序,通常遵循以下五个关键步骤:

步骤 1:建模

  • 目标: 在 Simulink 中创建一个能够准确描述您系统动态行为的模型。
  • 关键点:
    • 使用合适的库(如 Simulink Library, DSP System Toolbox)搭建模型。
    • 明确定义模型的输入、输出和内部状态。
    • 确保模型是可综合的,即其功能可以被硬件执行。

步骤 2:配置参数

Embedded Coder教程如何快速上手?-图2
(图片来源网络,侵删)
  • 目标: 通过配置参数,告诉 Embedded Coder 如何生成代码。
  • 关键配置项(位于 Model Configuration Parameters > Code Generation):
    • System target file: 选择 ert.tlc (Embedded Coder Target),这是最常用和最灵活的选项。
    • Language: 选择 C 或 C++。
    • Generate code only: 只生成代码,不进行编译,适合在生成代码前进行语法检查。
    • Generate an example main program: 生成一个简单的 main.c 文件,用于快速测试生成的代码。
    • Customize function names: 可以自定义生成的函数名,以便于集成到现有代码库中。

步骤 3:验证模型

  • 目标: 确保模型的行为符合设计要求,并且在生成代码后,模型的行为与生成的代码行为一致。
  • 验证方法:
    • 仿真: 运行 Simulink 模型,检查仿真结果。
    • 软件在环: 在宿主机(如PC)上编译并运行生成的代码,比较其输出与模型仿真结果是否一致。
    • 处理器在环: 在目标硬件上运行生成的代码,比较其输出与模型仿真结果是否一致。
    • 硬件在环: 将生成的代码部署到目标硬件,并连接到实际的物理环境进行测试。

步骤 4:生成代码

  • 目标: 执行代码生成命令。
  • 操作:
    • 在 Simulink 界面,点击 Code 选项卡,然后点击 C/C++ Code > Build Code
    • Embedded Coder 会根据您在步骤 2 中设置的参数,自动分析模型、生成头文件、源文件以及构建脚本(如 makefile)。

步骤 5:集成与部署

  • 目标: 将生成的代码集成到您的嵌入式开发环境中,并烧录到目标硬件上运行。
  • 操作:
    • 打开生成的代码文件夹,您会看到清晰的目录结构(src, include, docs等)。
    • 使用您 IDE(如 Keil, IAR, Eclipse)中的编译器,根据生成的 makefile 或项目文件进行编译和链接。
    • 通过调试器将最终的可执行文件烧录到目标硬件中。

第三部分:入门实战 - 一个简单的 FIR 滤波器

让我们通过一个具体的例子来走一遍完整的工作流。

Embedded Coder教程如何快速上手?-图3
(图片来源网络,侵删)

建模

  1. 打开 MATLAB,输入 simulink 并创建一个新模型。
  2. 从 Simulink Library Browser 中拖拽以下模块到模型中:
    • Sources Library: Signal From Workspace (作为输入信号)
    • DSP System Toolbox / Filtering / Filters: FIR Filter Design (设计滤波器)
    • DSP System Toolbox / Filtering / Filters: FIR Filter (应用滤波器)
    • Sinks Library: Scope (查看结果)
  3. 连接模块:Signal From Workspace -> FIR Filter -> Scope
  4. 双击 Signal From Workspace,设置 Signalsin(0.2*pi*(0:100))' + 0.5*randn(101,1)',设置 Sample time1
  5. 双击 FIR Filter Design,选择 Design methodLowpass,设置 Cutoff frequency (Hz)1 (归一化频率),点击 Design Filter,然后将该模块的输出连接到 FIR FilterNumerator 端口。

配置参数

  1. 在模型窗口中,点击 Model Settings (齿轮图标)。
  2. 在弹出的对话框中,选择左侧的 Code Generation
  3. System target file 下拉菜单中,选择 ert.tlc
  4. Language 中选择 C
  5. 确保 Generate an example main program 被勾选,这样会生成一个简单的 main.c 用于测试。
  6. 点击 OK 保存。

验证模型

  1. 点击 Run 按钮运行仿真。
  2. 双击 Scope 查看滤波前后的信号波形,确认滤波效果符合预期。

生成代码

  1. 点击 Code 选项卡。
  2. 点击 C/C++ Code > Build Code
  3. MATLAB 会在当前工作目录下创建一个名为 slprj 的文件夹,并在其中生成代码,您可以打开 slprj/ert_rtw/fir_filter_grt_rtw 目录查看生成的 fir_filter.cfir_filter.h 等文件。

集成与部署(概念演示)

  • 打开生成的 main.c 文件,您会发现它已经包含了调用 step() 函数(Simulink 生成的函数)来运行滤波器的 main 函数。
  • 在实际项目中,您需要将生成的 src 文件夹下的 .c 文件和 include 文件夹下的 .h 文件添加到您的嵌入式工程中,并使用相应的编译器进行编译。

第四部分:高级主题与最佳实践

数据类型与定点化

  • 问题: 浮点运算在许多嵌入式处理器上很慢且占用资源多。
  • 解决方案: 使用 Simulink 的 Fixed-Point Designer 工具箱。
  • 实践:
    1. 在模型中,将 Signal From WorkspaceScope 的数据类型设置为 fixdt(1, 16, 15) (16位定点数,1位符号位,15位小数)。
    2. 双击 FIR Filter 模块,在 Main 选项卡中,将 Output 数据类型也设置为 fixdt(1, 16, 15)
    3. 运行仿真,确保定点化后的结果与浮点结果在可接受的误差范围内。
    4. 重新生成代码,此时生成的代码将使用高效的定点整数运算。

代码可读性与可维护性

  • 使用注释: 在 Simulink 模块中添加注释(Ctrl+I),这些注释会自动生成到代码中。
  • 使用数据字典: 使用 Simulink Data Dictionary (.sldd 文件) 来集中管理模型中所有参数、信号和状态的数据类型、单位、范围等信息,这极大地提高了模型的可维护性。
  • 使用 coder.targetcoder.inline:
    • coder.target('Rtw'): 用于判断代码是否正在被生成,可以在 MATLAB Function 模块中用它来编写仅在代码生成时执行的逻辑。
    • coder.inline('never'): 强制 Embedded Coder 不要将某个函数内联,以保持函数的独立性,便于调试。

符合编码标准(如 MISRA C)

  • 启用检查:Model Configuration Parameters > Code Generation > Diagnostics 中,可以启用 MISRA C:2004MISRA C:2012 的检查规则。
  • 查看报告: 代码生成后,Embedded Coder 会生成一个详细的 HTML 报告,标出所有不符合标准的代码位置和原因,方便您进行修复。

自定义代码生成

  • 编写 TLC 文件: 对于非常特殊的需求,您可以编写 TLC (Target Language Compiler) 模板文件,直接控制代码生成的最终形式,这是最高级的定制方法。
  • 使用 makefile 模板: 您可以提供一个自定义的 makefile 模板,让 Embedded Coder 使用您指定的编译器、链接器和编译选项。

第五部分:学习资源

  1. 官方文档 (最权威):

  2. 视频教程:

    • 在 MathWorks 官方 YouTube 频道搜索 "Embedded Coder Tutorial",有大量入门和进阶视频。
    • 搜索 "MATLAB EXPO" 相关演讲,通常有来自各大厂商(如 Bosch, Tesla)的 Embedded Coder 最佳实践分享。
  3. 示例模型:

    • 在 MATLAB 命令窗口输入 ecoderex* 并按 Tab 键,可以查看所有 Embedded Coder 自带的示例模型。ecoderex_fir_fixpt 就是一个很好的定点滤波器示例。
  4. 社区与支持:

希望这份详细的教程能帮助你顺利掌握 Embedded Coder!祝你学习愉快!

分享:
扫描分享到社交APP
上一篇
下一篇