Why a condition like If (~Input) changes to a complex condition with ternary operator ?
Mostrar comentarios más antiguos
When I am trying to generate C code with Embedded Coder, the following condition
if (~Input)
is converted to the following ugly condition
if ((boolean_T)((int32_T)((Input ? ((int32_T)1) : ((int32_T)0)) ^ 1))) {
Is there any option to change in the setting to avoid this type of code being generated?
Is there a reason why this code would be generated instead of a simpler alternative?
The same code is generated if I change the condition to:
if (false == Input)
4 comentarios
Les Beckham
el 1 de Dic. de 2022
Yikes. That is ugly. Just curious, what is the type (class) of Input? Double? Logical?
Also, are you sure there isn't a typo? Correct me if I'm wrong, but isn't this going to be 1: ((int32_T)0)) ^ 1))
Walter Roberson
el 1 de Dic. de 2022
Bleh, that code is equivalent to
xor(1, Input ~= 0)
which is pretty ugly.
What happens if you change the condition to
if (Input == 0)
?
Miguel
el 1 de Dic. de 2022
Respuesta aceptada
Más respuestas (1)
Les Beckham
el 1 de Dic. de 2022
0 votos
So, the original condition if (~Input) is C code and not Matlab code? If so, you should use the logical not operator which is ! in C instead of ~ (as it is in Matlab).
~false in C will be 0xFFFFFFFE (or similar) and the ugly ternary expression coerces that back to a 1.
BTW - please post comments as comments rather than answers.
3 comentarios
Walter Roberson
el 1 de Dic. de 2022
No, the original is MATLAB code, but Embedded Coder is generating the ugly version.
Les Beckham
el 1 de Dic. de 2022
I thought that too until OP said "The class of variable "Input" is "boolean_T". Perhaps he meant in the generated code. I meant in the original Matlab code when I asked that. Probably a misunderstanding.
Miguel
el 1 de Dic. de 2022
Categorías
Más información sobre Texas Instruments C2000 Processors en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

