simulink生成嵌入式代码结构分析

simulink生成嵌入式代码结构分析

一、simulink的Embedded Coder生成的代码结构

在这里插入图片描述

二、生成的代码分析

(1)Main file中的ert_main.c是一个示例文件,提供实现函数功能的组织架构。

 void rt_OneStep(void)
    {
       /* Step the model */
       **untitled_step();**
        /* Get model outputs here */
     }
 int_T main(int_T argc, const char *argv[])
    {
          /* Initialize model */
           rt_OneStep();
         /* Terminate model */
    }

其中的关键是rt_OneStep()函数,自动生成代码中强调只要将这个函数和实时时钟联系起来或者中断函数联系起来,就可以实现实时化。
/*
* Associating rt_OneStep with a real-time clock or interrupt service routine
* is what makes the generated code “real-time”. The function rt_OneStep is
* always associated with the base rate of the model. Subrates are managed
* by the base rate from inside the generated code. Enabling/disabling
* interrupts and floating point context switches are target specific. This
* example code indicates where these should take place relative to executing
* the generated code step function. Overrun behavior should be tailored to
* your application needs. This example simply sets an error status in the
* real-time model and returns from rt_OneStep.
*/

从另外一个角度来讲,simulink自动代码生成主要是指rt_OneStep()函数的生成,只要将这个函数与QT或者ARM硬件里面的时钟或者中断联系起来即可实现实时控制。

(2) Model files中的untitled.h定义了initialize函数、 step()函数、terminate函数,untiled.c函数具体实现了这些函数。rt_OneStep()调用了untitled_step()函数。

  void untitled_step(void)
      {
        z = k * rtDW.Integrator_DSTATE;
        rtDW.Integrator_DSTATE += (x + y) * 0.0001;
      }
     /* Model initialize function */
  void untitled_initialize(void)
     {
        /* (no initialization code required) */
      }
     /* Model terminate function */
  void untitled_terminate(void)
      {
        /* (no terminate code required) */
      }

(3) Utility files中的rtwtypes.h定义了常用的数据结构。

   43   /*=======================================================================*
   44    * Fixed width word size data types:                                     *
   45    *   int8_T, int16_T, int32_T     - signed 8, 16, or 32 bit integers     *
   46    *   uint8_T, uint16_T, uint32_T  - unsigned 8, 16, or 32 bit integers   *
   47    *   real32_T, real64_T           - 32 and 64 bit floating point numbers *
   48    *=======================================================================*/
   49   typedef signed char int8_T;
   50   typedef unsigned char uint8_T;
   51   typedef short int16_T;
   52   typedef unsigned short uint16_T;
   53   typedef int int32_T;
   54   typedef unsigned int uint32_T;
   55   typedef float real32_T;
   56   typedef double real64_T;
   57   
   58   /*===========================================================================*
   59    * Generic type definitions: boolean_T, char_T, byte_T, int_T, uint_T,       *
   60    *                           real_T, time_T, ulong_T.                        *
   61    *===========================================================================*/
   62   typedef double real_T;
   63   typedef double time_T;
   64   typedef unsigned char boolean_T;
   65   typedef int int_T;
   66   typedef unsigned int uint_T;
   67   typedef unsigned long ulong_T;
   68   typedef char char_T;
   69   typedef unsigned char uchar_T;
   70   typedef char_T byte_T;
   71   
   72   /*=======================================================================*
   73    * Min and Max:                                                          *
   74    *   int8_T, int16_T, int32_T     - signed 8, 16, or 32 bit integers     *
   75    *   uint8_T, uint16_T, uint32_T  - unsigned 8, 16, or 32 bit integers   *
   76    *=======================================================================*/
   77   #define MAX_int8_T                     ((int8_T)(127))
   78   #define MIN_int8_T                     ((int8_T)(-128))
   79   #define MAX_uint8_T                    ((uint8_T)(255U))
   80   #define MAX_int16_T                    ((int16_T)(32767))
   81   #define MIN_int16_T                    ((int16_T)(-32768))
   82   #define MAX_uint16_T                   ((uint16_T)(65535U))
   83   #define MAX_int32_T                    ((int32_T)(2147483647))
   84   #define MIN_int32_T                    ((int32_T)(-2147483647-1))
   85   #define MAX_uint32_T                   ((uint32_T)(0xFFFFFFFFU))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值