Project 2 - Development of TFT Cluster Speedometer Software Component
1. Code Generation
/*
* Event Support License -- for demonstration use and event support. Not
* for government, research, commercial, or other organizational use.
*
* File: TFT_Cluster_Speedometer.c
*
* Code generated for Simulink model 'TFT_Cluster_Speedometer'.
*
* Model version : 1.30
* Simulink Coder version : 9.7 (R2022a) 13-Nov-2021
* C/C++ source code generated on : Fri Dec 30 20:50:50 2022
*
* Target selection: ert.tlc
* Embedded hardware selection: Intel->x86-64 (Windows64)
* Code generation objectives: Unspecified
* Validation result: Not run
*/
#include "TFT_Cluster_Speedometer.h"
#include "rtwtypes.h"
#include "TFT_Cluster_Speedometer_private.h"
/* Exported data definition */
/* Definition for custom storage class: Localizable */
static uint16_T DisplaySpeed1; /* '<S5>/Subtract' */
/* Display Speed Calculation 1 */
static uint16_T DisplaySpeed_Filter; /* '<S2>/Subtract' */
/*
Display Speed Filter Value
*/
uint16_T Vehicle_Speed_Display; /* '<S6>/Switch' */
/* Vehicle speed displayed by speedometer */
/* Real-time model */
static RT_MODEL_TFT_Cluster_Speedome_T TFT_Cluster_Speedometer_M_;
RT_MODEL_TFT_Cluster_Speedome_T *const TFT_Cluster_Speedometer_M =
&TFT_Cluster_Speedometer_M_;
/* Model step function */
void TFT_Cluster_Speedometer_step(void)
{
/* local block i/o variables */
uint16_T Display_Speed;
/* Outputs for Atomic SubSystem: '<Root>/TFT_Cluster_Speedometer' */
/* Saturate: '<S3>/Saturation' incorporates:
* Inport: '<Root>/Average_Vehicle_Speed'
*/
if (Average_Vehicle_Speed > 250) {
/* Saturate: '<S3>/Saturation' */
Display_Speed = 250U;
} else if (Average_Vehicle_Speed < 2) {
/* Saturate: '<S3>/Saturation' */
Display_Speed = 2U;
} else {
/* Saturate: '<S3>/Saturation' */
Display_Speed = Average_Vehicle_Speed;
}
/* End of Saturate: '<S3>/Saturation' */
/* Outputs for Enabled SubSystem: '<S1>/Auxillary_Data_Filtering' incorporates:
* EnablePort: '<S2>/Enable'
*/
/* Outputs for Enabled SubSystem: '<S1>/Main_Data_Filtering' incorporates:
* EnablePort: '<S5>/Enable'
*/
/* RelationalOperator: '<S4>/Compare' incorporates:
* Constant: '<S4>/Constant'
* Inport: '<Root>/Timer_Input'
* Math: '<S1>/Rem'
*/
if ((uint16_T)(Timer_Input % 10) == 0) {
uint32_T tmp;
/* Product: '<S5>/Divide' incorporates:
* Inport: '<Root>/Mainfilt_SpeedValue'
*/
tmp = (uint32_T)Mainfilt_SpeedValue << 16;
if (tmp == 0U) {
/* Sum: '<S5>/Subtract' */
DisplaySpeed1 = MAX_uint16_T;
/* Divide by zero handler */
} else {
/* Sum: '<S5>/Subtract' incorporates:
* Gain: '<S5>/Gain'
*/
DisplaySpeed1 = (uint16_T)(42598U * Display_Speed / tmp);
}
/* End of Product: '<S5>/Divide' */
/* Product: '<S2>/Divide' incorporates:
* Gain: '<S2>/Gain'
* Inport: '<Root>/Auxillaryfilt_SpeedValue'
*/
if (Auxillaryfilt_SpeedValue == 0U) {
tmp = MAX_uint32_T;
/* Divide by zero handler */
} else {
tmp = 51118U * DisplaySpeed1 / Auxillaryfilt_SpeedValue;
}
/* Sum: '<S2>/Subtract' incorporates:
* Product: '<S2>/Divide'
*/
DisplaySpeed_Filter = (uint16_T)(tmp >> 16);
}
/* End of RelationalOperator: '<S4>/Compare' */
/* End of Outputs for SubSystem: '<S1>/Main_Data_Filtering' */
/* End of Outputs for SubSystem: '<S1>/Auxillary_Data_Filtering' */
/* Switch: '<S6>/Switch' incorporates:
* Constant: '<S7>/Constant'
* RelationalOperator: '<S7>/Compare'
* Sum: '<S6>/Subtract'
*/
if ((uint16_T)(DisplaySpeed_Filter - Display_Speed) > 2) {
/* Switch: '<S6>/Switch' */
Vehicle_Speed_Display = Display_Speed;
} else {
/* Switch: '<S6>/Switch' */
Vehicle_Speed_Display = DisplaySpeed_Filter;
}
/* End of Switch: '<S6>/Switch' */
/* End of Outputs for SubSystem: '<Root>/TFT_Cluster_Speedometer' */
}
/* Model initialize function */
void TFT_Cluster_Speedometer_initialize(void)
{
/* (no initialization code required) */
}
/* Model terminate function */
void TFT_Cluster_Speedometer_terminate(void)
{
/* (no terminate code required) */
}
/*
* File trailer for generated code.
*
* [EOF]
*/