Generated C code inspection in Simulink - Time & Space Complexity
When we inspect generated C code from Simulink models, we want to know how the code's running time changes as the input size grows.
We ask: How does the code's work increase when inputs get bigger?
Analyze the time complexity of the following generated C code snippet.
// Generated C code from Simulink
void processData(double input[], int size, double output[]) {
int i;
for (i = 0; i < size; i++) {
output[i] = input[i] * 2.0;
}
}
This code doubles each element in an input array and stores it in an output array.
Look for loops or repeated steps.
- Primary operation: The for-loop that multiplies each element by 2.
- How many times: The loop runs once for each element in the input array, so size times.
As the input array gets bigger, the number of times the loop runs grows the same way.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 multiplications |
| 100 | 100 multiplications |
| 1000 | 1000 multiplications |
Pattern observation: The work grows directly with the input size. Double the input, double the work.
Time Complexity: O(n)
This means the time to run the code grows in a straight line with the number of input elements.
[X] Wrong: "The loop runs a fixed number of times, so the time is constant."
[OK] Correct: The loop count depends on the input size, so if the input grows, the loop runs more times, increasing the total work.
Understanding how generated code scales helps you explain performance clearly and shows you can read and analyze real code efficiently.
"What if the code had a nested loop inside the for-loop that also ran 'size' times? How would the time complexity change?"
Practice
Solution
Step 1: Understand the role of generated code inspection
Generated C code inspection is used to check if the code matches the Simulink model's logic and to understand how the model is translated into code.Step 2: Eliminate unrelated options
Creating new blocks, speeding simulation, or converting code back to diagrams are not purposes of code inspection.Final Answer:
To verify the correctness and understand the behavior of the generated code -> Option CQuick Check:
Code inspection = verify and understand code [OK]
- Thinking code inspection creates new blocks
- Confusing code inspection with simulation speedup
- Assuming code inspection converts code back to diagrams
Solution
Step 1: Identify the tool for code generation
Simulink Coder is the tool designed to generate C and C++ code from Simulink models.Step 2: Confirm other tools' purposes
Profiler measures performance, Data Inspector visualizes signals, Real-Time runs models on hardware, none generate code.Final Answer:
Simulink Coder -> Option DQuick Check:
Code generation tool = Simulink Coder [OK]
- Confusing Profiler with code generator
- Mixing Data Inspector with code generation
- Assuming Real-Time generates code
rtU.inputSignal represent?/* Model step function */
void model_step(void) {
real_T output = rtU.inputSignal * 2.0;
rtY.outputSignal = output;
}Solution
Step 1: Analyze variable naming conventions
In generated code,rtUprefix usually denotes inputs to the model, sortU.inputSignalis an input.Step 2: Check usage in code
The code multipliesrtU.inputSignalby 2 and assigns to output, confirming it is an input value.Final Answer:
An input signal to the model -> Option BQuick Check:
rtU = inputs, rtY = outputs [OK]
- Thinking rtU is output or local variable
- Assuming inputSignal is a constant
- Confusing variable scope
int32_T counter = 0 counter += 1;
What is the error here?
Solution
Step 1: Check syntax of variable declaration
The first line declarescounterbut misses a semicolon at the end, which is required in C.Step 2: Validate increment statement
The incrementcounter += 1;is correct syntax and valid for int32_T type.Final Answer:
Missing semicolon after the first statement -> Option AQuick Check:
Every C statement ends with ; [OK]
- Ignoring missing semicolon errors
- Thinking increment syntax is wrong
- Confusing variable types unnecessarily
Solution
Step 1: Understand code optimization options
Simulink allows marking signals as unused in the Code Mappings editor to exclude them from generated code.Step 2: Evaluate other options
Enabling logging increases code size, increasing sample time changes model behavior, disabling coder stops code generation.Final Answer:
Use the Code Mappings editor to mark unused signals as 'Exclude from code' -> Option AQuick Check:
Exclude unused signals via Code Mappings [OK]
- Enabling logging increases code size
- Changing sample time affects model timing
- Disabling coder stops code generation
Ready to prove it?
Pass the test and this pattern moves unknown
