# C Code

SIMBA 2021.01 Introduced C Code support for control systems. The "C Code" model allows the user to write C Code directly in SIMBA to build custom control models.

The "C Code" model is available in the Control>Code library.

## Get started

Simply click the "Edit" button of a C Code device to access the code editor.

The C code is compiled when the simulation starts after each code change. The interface of the C Code is composed of three main functions described below:

### void initialize()

initialize() is called once at the beginning of the simulation. All the variables used in the model must be initialized and resources must be allocated here.

### void calculate_outputs(double* outputs, double* inputs, double time, double time_step)

calculate_outputs is called once at each time step to calculate model outputs. Function parameters are listed below:

• outputs: array of outputs to be calculated. Array size is equal to the number of outputs.
• inputs: array of inputs values. Array size is equal to the number of inputs.
• time: current simulation time
• time_step: current simulation time-step

Important

In the case of zero-crossing interpolation (switching), a time point is added at the zero-crossing time (even using the fixed-time step solver).

### void terminate()

terminate() is called once at the end of the simulation. The resources allocated in the initialize function must be released here.

## Model data

It is recommended to place model variables in the model_data structure. This allows the predictive time-step solver to take and restore snapshots of the model state.

## Compilation errors

Compilation error messages are displayed in the top console.

## Compiler installation

The first time a C Code model is used, SIMBA will install the compiler. This task is indicated in the console and lasts about 30 seconds.

## Time-Step Control

The C Code device does not control the time step in SIMBA. To call the C Code model at a given frequency, an external clock can be used (see SR Buck Converter Design example).

## Runtime errors

SIMBA will likely crash in case of runtime error (like any other program). You can use the (debug) feature to investigate the cause of the issue.

## Snapshot and Time-travel

With the predictive time-step solver, the simulation time does not always elapse in one direction. Therefore, The C Code model needs to support time-travel and a snapshot mechanism is implemented with the snapshot function. The predictive time-step solver uses the snapshot function to restore a model to a previous state when needed. it is not recommended to modify this function.

## Under the hood

The C Code in SIMBA is not interpreted but is compiled using a powerful compiler (GCC 64-bit). This gives major advantages:

• Possibility to include your own header (#include "MyCode.h"...)
• Optimal runtime performance
• Possibility to debug your code

## Debug

It is possible to debug your code using the C Code (External File) model and an external debugger (more information).