3. 嵌入式代码生成环境配置

嵌入式代码生成环境配置 学习卡片

任务说明

本案例目标是为基于模型设计(MBD)工作流配置Simulink Embedded Coder,使其能够为ARM Cortex-M处理器生成高效、可部署的嵌入式C代码。您将完成一个最小可复现的配置闭环:创建模型→设置求解器→配置Embedded Coder目标→生成代码→验证代码文件。

环境依赖

  • MATLAB R2021b或更新版本(含Simulink、Embedded Coder、Simulink Coder)
  • ARM Cortex-M嵌入式处理器支持包(通过MATLAB Add-On Explorer安装“Embedded Coder Support Package for ARM Cortex-M Processors”)

模型创建与配置

以下MATLAB脚本创建了一个包含增益运算的简单模型,并完成针对ARM Cortex-M的代码生成配置。该模型使用离散求解器,采样时间设为0.01秒,输入为单精度浮点数,输出为放大2倍后的结果。

% create_model_and_generate_code.m
% 创建模型并配置Embedded Coder生成ARM Cortex-M代码

% 1. 创建新模型
modelName = 'cortex_m_gain';
new_system(modelName);
open_system(modelName);

% 2. 添加模块:输入端口、增益、输出端口
add_block('simulink/Sources/In1', [modelName '/Input']);
add_block('simulink/Math Operations/Gain', [modelName '/Gain']);
add_block('simulink/Sinks/Out1', [modelName '/Output']);

% 3. 设置增益值
set_param([modelName '/Gain'], 'Gain', '2');

% 4. 连接模块
add_line(modelName, 'Input/1', 'Gain/1');
add_line(modelName, 'Gain/1', 'Output/1');

% 5. 配置求解器为离散、固定步长
set_param(modelName, 'Solver', 'FixedStepDiscrete');
set_param(modelName, 'FixedStep', '0.01');
set_param(modelName, 'StopTime', '0.1');

% 6. 配置Embedded Coder目标为ARM Cortex-M
set_param(modelName, 'SystemTargetFile', 'ert.tlc');
set_param(modelName, 'TemplateMakefile', 'ert_unix.tmf');
set_param(modelName, 'GenCodeOnly', 'on');

% 7. 设置硬件为ARM Cortex-M(3A为Cortex-M3/M4系列)
set_param(modelName, 'HardwareBoard', 'ARM Cortex-M3/M4');
set_param(modelName, 'HardwareBoardType', 'ARM Compatible');

% 8. 代码生成接口配置
set_param(modelName, 'GenerateComments', 'on');
set_param(modelName, 'GenerateReport', 'off');
set_param(modelName, 'GenCodeOnly', 'on');

% 9. 保存模型
save_system(modelName);

% 10. 生成代码
evalin('base', ['slbuild(''' modelName ''')']);

disp('代码生成完成。输出目录:');
disp(fullfile(pwd, modelName '_ert_rtw'));

代码生成验证

执行上述脚本后,MATLAB工作目录下将生成cortex_m_gain_ert_rtw文件夹。验证生成代码是否满足ARM Cortex-M目标要求,需检查以下关键文件:

文件验证内容
cortex_m_gain.c包含cortex_m_gain_step()函数,内部实现y = 2.0F * u运算
cortex_m_gain.h声明外部可调用的步进函数和数据结构
ert_main.c包含main函数模板,展示如何周期性调用step函数

判定标准

  1. 脚本无错误执行完毕,MATLAB命令窗口显示“代码生成完成”提示。
  2. 生成目录中存在.c和.h文件,且cortex_m_gain.c中cortex_m_gain_step函数体包含浮点乘法运算(对应增益2)。
  3. 生成代码中无动态内存分配(malloc/free),符合嵌入式部署要求。
  4. 模型文件cortex_m_gain.slx可正常打开,模块连接与参数设置与脚本一致。
Embedded Coder ARM Cortex-M 代码生成配置流程 1. 模型创建 new_system + add_block 2. 求解器配置 FixedStepDiscrete 3. 目标选择 ert.tlc + ARM Cortex-M 4. 生成 slbuild 生成输出:cortex_m_gain_ert_rtw/ cortex_m_gain.c step函数:y=2.0F*u 无动态内存分配 cortex_m_gain.h 外部接口声明 数据类型定义 ert_main.c main函数模板 周期调用示例 验证点:检查step函数实现、确认无malloc、硬件配置为ARM Cortex-M

运行方式

将脚本保存为create_model_and_generate_code.m,在MATLAB中切换到目标工作目录后直接运行。脚本执行完成后,在生成的cortex_m_gain_ert_rtw文件夹中检查上述文件内容即可完成验证。若需部署到实际硬件,可将生成的C文件加入嵌入式工程,并按照ert_main.c中的调用模式周期性执行cortex_m_gain_step()函数。