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 Kommentar

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

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Lucas Lebert
Lucas Lebert am 5 Jul. 2018
Bearbeitet: Lucas Lebert am 20 Aug. 2020
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 Kommentare

Yu Zhao
Yu Zhao am 9 Jul. 2018
Bearbeitet: Yu Zhao am 9 Jul. 2018
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).

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Manuel Stumpf
Manuel Stumpf am 16 Jul. 2018

0 Stimmen

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 Kommentare

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

Melden Sie sich an, um zu kommentieren.

Zhenwei Sun
Zhenwei Sun am 11 Sep. 2018

0 Stimmen

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 Kommentar

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)

Melden Sie sich an, um zu kommentieren.

Produkte

Version

R2017b

Gefragt:

am 3 Jul. 2018

Kommentiert:

Y
Y
am 12 Jun. 2025

Community Treasure Hunt

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

Start Hunting!

Translated by