利用Embedded Coder工具箱生成c代码

利用Embedded Coder工具箱生成c代码

关于Embedded Coder工具箱

​ Embedded Coder 工具箱可以生成可读、紧凑且快速的 C 和 C++ 代码,以便用于嵌入式处理器。另外, Embedded Coder 提供了 MATLAB Coder 和Simulink Coder 配置选项和高级优化功能,以便对所生成代码的函数、文件和数据进行精细控制。 这些优化可提高代码效率,并有助于与生产中使用的已有代码、数据类型和校准参数集成。 可以将第三方开发环境并入构建过程,以便为嵌入式系统上的全套部署生成可执行文件。

主要特性

  1. 扩展 MATLAB Coder 和 Simulink Coder 的优化和代码配置选项
  2. 使用 Simulink ? 数据字典功能的存储类、类型和别名定义
  3. 特定于处理器的代码优化
  4. 使用或不使用 RTOS 的多速率、多任务和多核代码执行
  5. 代码验证,包括 SIL 和 PIL 测试、自定义注释以及代码报告(从模型追踪到代码和要求以及从代码和要
    求追踪模型)
  6. 集成了 Texas Instruments 的 Code Composer Studio 、 Analog Devices VisualDSP++ 和其他
    第三方嵌入式开发环境
  7. Simulink 中的标准支持,包括 ASAP2 、AUTOSAR 、DO-178 、IEC 61508 、ISO 26262 和 MISRA C 一个定点模型,具有生成的代码及其针对 SIL 执行的仿真模式设置。 Embedded Coder 使您可以为生产嵌入式系统
    快速生成、记录和测试代码。

生成目标

将PID控制器生成c代码

在这里插入图片描述

PID控制器的特点

  1. PID公式: P + I ∗ T s 1 z − 1 + D ∗ 1 T s z − 1 z P + I*{T_s}\frac{1}{{z - 1}}{\rm{ + D*}}\frac{1}{{{T_s}}}\frac{{z - 1}}{z} P+ITsz11+DTs1zz1
  2. 带限制输出:输出幅值为0v到5v
  3. 数据类型均是double性

使用步骤

  1. 在“APPS”里面找到Embedded Coder工具箱:
    在这里插入图片描述
  2. 打开Embedded Coder使用“quick start”。这样可以更加精准的生成c代码。

在这里插入图片描述

  1. 打开“quick start”界面
    在这里插入图片描述

  2. 选择用于代码生成的模型或所选子系统。我选择生成c_code整个模型的代码

在这里插入图片描述

  1. 选择代码类型和生成代码您生成的实例数

在这里插入图片描述

  1. 选择硬件,数据类型

在这里插入图片描述

  1. 选择最重要的代码生成目标。使用RAM
    在这里插入图片描述

  2. 配置参数修改
    在这里插入图片描述

对生成的代码分析

报告列表

在这里插入图片描述

在这里插入图片描述

主代码分析

备注:P=0.0552;
I=0.1264;
D=0.000034389;

.h文件


typedef struct {
  real_T Integrator_DSTATE;            /* '<S31>/Integrator' */
  real_T UD_DSTATE;                    /* '<S26>/UD' */
} DW;

/* External inputs (root inport signals with default storage) */
typedef struct {
  real_T OUT;                          /* '<Root>/In1' */
} ExtU;

/* External outputs (root outports fed by signals with default storage) */
typedef struct {
  real_T Out1;                         /* '<Root>/Out1' */
} ExtY;

/* Block signals and states (default storage) */
extern DW rtDW;

/* External inputs (root inport signals with default storage) */
extern ExtU rtU;

/* External outputs (root outports fed by signals with default storage) */
extern ExtY rtY;

/* Model entry point functions */
extern void c_code_initialize(void);
extern void c_code_step(void);

主要.c文件

/*************************

**************************/
void c_code_step(void)
{
  real_T rtb_TSamp;

  /* 
   *  y = u * K where K = 1 / ( w * Ts )
   */
  rtb_TSamp = 3.4389E-5 * rtU.OUT * 50.0;

  rtY.Out1 = (0.0552 * rtU.OUT + rtDW.Integrator_DSTATE) + (rtb_TSamp -
    rtDW.UD_DSTATE);

  if (rtY.Out1 > 5.0)
  {
    rtY.Out1 = 5.0;
  } 
    else
    {
    if (rtY.Out1 < 0.0)
    {
      rtY.Out1 = 0.0;
    }
  }

  rtDW.Integrator_DSTATE += 0.1264 * rtU.OUT * 0.02;
  rtDW.UD_DSTATE = rtb_TSamp;
}
.Out1 < 0.0)
    {
      rtY.Out1 = 0.0;
    }
  }

  rtDW.Integrator_DSTATE += 0.1264 * rtU.OUT * 0.02;
  rtDW.UD_DSTATE = rtb_TSamp;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值