Damosが吐いたソース

Posted on
damos mbd yakindu

ヘッダ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#ifndef CRUISECONTROL_H_
#define CRUISECONTROL_H_

#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

typedef struct {
<09>double desiredSpeed;
<09>double actualSpeed;
} CruiseControl_Input;

typedef struct {
<09>double power;
} CruiseControl_Output;

void CruiseControl_initialize(void);

void CruiseControl_execute(const CruiseControl_Input *input, CruiseControl_Output *output);

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* CRUISECONTROL_H_ */

実装

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <math.h>

#include "CruiseControl.h"

typedef struct {
  double sum[2];
  uint_fast8_t sum_index;
} CruiseControl_DiscreteIntegrator_Context;

typedef struct {
  CruiseControl_DiscreteIntegrator_Context CruiseControl_DiscreteIntegrator;
} CruiseControl_Context;

typedef struct { double data[2]; } CruiseControl_Vector;

static CruiseControl_Context CruiseControl_context;

void CruiseControl_initialize(void) {
  /* DiscreteIntegrator */
  {
    CruiseControl_context.CruiseControl_DiscreteIntegrator.sum_index = 0;
    {
      CruiseControl_context.CruiseControl_DiscreteIntegrator.sum[CruiseControl_context.CruiseControl_DiscreteIntegrator.sum_index] = 0.0;
    }
  }
}

void CruiseControl_execute(const CruiseControl_Input *input, CruiseControl_Output *output) {
  double CruiseControl_Sum_y;
  double CruiseControl_Gain_y;
  double CruiseControl_DiscreteIntegrator_y;
  int32_t CruiseControl_Constant_y;
  double CruiseControl_Sum2_y;
  double CruiseControl_Saturation_y;
  uint_fast8_t CruiseControl_Compare_y;
  double CruiseControl_Switch_y;

  /*
   * Compute outputs
   */

  /* Sum */
  {
    CruiseControl_Vector sum_input = { { input->desiredSpeed, input->actualSpeed } };
    {
      CruiseControl_Sum_y = (1.0 * sum_input.data[INT32_C(0)] + -1.0 * sum_input.data[INT32_C(1)]);
    }
  }

  /* Gain */
  {
    {
      CruiseControl_Gain_y = 0.1 * CruiseControl_Sum_y;
    }
  }

  /* DiscreteIntegrator */
  {
    {
      CruiseControl_DiscreteIntegrator_y = CruiseControl_context.CruiseControl_DiscreteIntegrator.sum[CruiseControl_context.CruiseControl_DiscreteIntegrator.s
    }
  }

  /* Constant */
  {
    {
      CruiseControl_Constant_y = INT32_C(0);
    }
  }

  /* Sum2 */
  {
    CruiseControl_Vector sum2_input = { { CruiseControl_Gain_y, CruiseControl_DiscreteIntegrator_y } };
    {
      CruiseControl_Sum2_y = (1.0 * sum2_input.data[INT32_C(0)] + 1.0 * sum2_input.data[INT32_C(1)]);
    }
  }

  /* Saturation */
  {
    {
      double ifresult;
      if (CruiseControl_Sum2_y > 1.0) {
        ifresult = 1.0;
      } else {
        double ifresult2;
        if (CruiseControl_Sum2_y < -1.0) {
          ifresult2 = -1.0;
        } else {
          ifresult2 = CruiseControl_Sum2_y;
        }
        ifresult = ifresult2;
      }
      CruiseControl_Saturation_y = ifresult;
    }
  }

  /* Compare */
  {
    {
      CruiseControl_Compare_y = CruiseControl_Sum2_y == CruiseControl_Saturation_y;
    }
  }

  /* Power */
  {
    output->power = CruiseControl_Saturation_y;
  }

  /* Switch */
  {
    {
      double ifresult;
      if (CruiseControl_Compare_y) {
        ifresult = CruiseControl_Sum_y;
      } else {
        ifresult = ((double) (CruiseControl_Constant_y));
      }
      CruiseControl_Switch_y = ifresult;
    }
  }

  /*
   * Update states
   */

  /* DiscreteIntegrator */
  {
    {
      CruiseControl_context.CruiseControl_DiscreteIntegrator.sum[(CruiseControl_context.CruiseControl_DiscreteIntegrator.sum_index + 1) % 2] = CruiseControl_c
    }
    CruiseControl_context.CruiseControl_DiscreteIntegrator.sum_index = (CruiseControl_context.CruiseControl_DiscreteIntegrator.sum_index + 1) % 2;
  }
}