Enumeration Code Generation with Embedded Coder (autosar.tlc)

Hello,
does anyone have a clue what causes the following error message and how I can overcome this problem? I have a Simulink model that uses the enumeration defined in "State_Car.m"
classdef State_Car < Simulink.IntEnumType
enumeration
PARKEN_BN_NIO(1)
PARKEN_BN_IO(2)
STANDFKT_KUNDE_NICHT_IM_FZG(3)
WOHNEN(5)
PRUEFEN_ANALYSE_DIAGNOSE(7)
FAHRBEREITSCHAFT_HERSTELLEN(8)
FAHREN(10)
FAHRBEREITSCHAFT_BEENDEN(12)
SIGNAl_UNBEFUELLT(15)
end
end
The error message I get during build process is:
### Build procedure for model: 'swc_heat_2017b' aborted due to an error.
The header file of the enumerated type State_Car, should be set to Rte_Type.h. To fix this error, update the getHeaderFile method of the enumeration type to return Rte_Type.h

1 Comment

Hello for the enumeration problem, I have a little sharing to help everyone
1-If enumeration is only used within SWC, there is no need to define the Rte_type. h header file; If the SWC external port also needs to be enumerated, it is necessary to add the Rte_type. h header file
2-Enumeration generates different forms define or typedef , as shown in the following example:
2.1-Generate enumeration exists in the form of define
classdef BulbStatus < uint8
enumeration
On(0)
Off(1)
end
end
2.2-Generate enumeration exists in the form of typedef
classdef BulbStatus < Simulink.IntEnumType
enumeration
On(0)
Off(1)
end
end

Sign in to comment.

 Accepted Answer

Hi Yu Zhao!
As per the AUTOSAR standard, all data types must have a definition generated in Rte_type.h. This is the reason for the error and it is not possible to use a different header when doing AUTOSAR code generation.
For data types used solely inside of a SWC (not in the definition of a port) you only need to specify the header file as Rte_type.h only if you want the data type to be exported as an IncludedDataTypeSet.
Here's a small example for the implementation of the getHeaderFile method:
classdef State_Car < Simulink.IntEnumType
enumeration
On(1)
Off(2)
end
methods (Static = true)
function retVal = getHeaderFile()
retVal = 'Rte_Type.h';
end
end
end
Have a great day!
~Lucas

7 Comments

Hi Lucas,
your model indeed compiles with autosar.tlc and enumeration. However after inserting a matlab function I get the error message:
Data 'u' (#961) has compiled structure or enumeration type 'State_Car', which specifies custom header file 'Rte_Type.h'. This custom header file must be directly or indirectly included in model's Configuration Parameters 'Simulation Target/Header file' field.
No '#include "<headerfile>"' is detected in 'Simulation Target/Header file' field.'
Do you know the root of this problem?
Thanks Yu
Hi!
You need to activate the checkbox "Generate typedefs for imported bus and enumeration types" in the configuration parameters.
Thanks!
~Lucas
Hi Lucas,
that eliminated the error. However instead of enumeration typedefs #define is generated:
#ifndef State_Car_PARKEN_BN_NIO
#define State_Car_PARKEN_BN_NIO (1)
#endif
#ifndef State_Car_PARKEN_BN_IO
#define State_Car_PARKEN_BN_IO (2)
#endif
#ifndef State_Car_STANDFKT_KUNDE_NICHT_IM_FZG
#define State_Car_STANDFKT_KUNDE_NICHT_IM_FZG (3)
#endif
#ifndef State_Car_WOHNEN
#define State_Car_WOHNEN (5)
#endif
...
I'm looking for typedef enum to minimize file size. Is it possible to force code in "Rte_Type.h" such as
typedef enum {
...
} state_car;
?
Did you figure out how to switch from #define to typedef enum?
i have the same problem, i would like to switch from #define to enum, anyone know how to do this?
I will take this feedback to my colleagues to be considered as an enhancement.
I have added this method to my enumeration type but the Simulink could not compile the model for simulation ( after Ctrl + D).

Sign in to comment.

More Answers (2)

It looks like I have a similar problem: Is it possible to use a RTE data type inside a referenced subsystem (e.g. in state flow)? I want to use the same data types inside of referenced subsystems and the external interface of my SWC. Right now I keep getting error messages like above.
Regards, Manuel

2 Comments

Hi, Manuel!
I would need to have a closer look at this. Could you please submit a help request to support@mathworks.de so I or one of my colleagues can have a look at this?
Thanks! ~Lucas
Thanks Lucas,
your answer to Yu's question gave me the hint that I needed. Code generation for Autosar is successful now! Thanks again, Manuel

Sign in to comment.

hi, i'm with same issues. i don't need the data def in "Rte_Types.h" due to this class is only for my SWC used. anyone have fix this problem?

1 Comment

classdef (Enumeration) EnColor < uint8
enumeration
Red (0)
Green (1)
Blue (2)
end
methods (Static = true)
function retValue = getDefaultValue()
retValue = EnColor.Red;
end
end
end
Define enum as above, you can change the base data type as you like. Secondly, What Lucas recommended setting.
Generated code will be something like below :
typedef uint8_T EnColor;
#define Red ((EnColor)0)
#define Green ((EnColor)1)
#define Blue ((EnColor)2)

Sign in to comment.

Products

Release

R2017b

Asked:

on 3 Jul 2018

Commented:

Y
Y
on 12 Jun 2025

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!