CANpack code generation Problem for MCU without floating-point math capabilities

3 Ansichten (letzte 30 Tage)
real32_T outValue = 0;
{
real32_T result =aa;
result =bb;
outValue = roundf(result);
"This facility may not be available on configurations of the EWL that run on platforms
that do not have floating-point math capabilities. "
--EWL C Reference Manual.pdf

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 17 Sep. 2023
Bearbeitet: Walter Roberson am 17 Sep. 2023

roundf has been part of the C standard library since C99. However it expects floating point input and returns floating point output, which is a problem if you are using a system that does not have floating point hardware.

On a system that does not have floating point hardware, you have two choices:

  • you can carefully write your code to only operate on the int* and uint* classes; or
  • you can convert your code to use fixed-point arithmetic with the Fixed-Point Toolbox. The fixed point toolbox can emulate many floating-point operations in software, including potentially to greater precision than double precision floating point. However, transcendental functions such as trig functions or log generally have to be rewritten; search for CORDIC for those.
  1 Kommentar
zhichao li
zhichao li am 17 Sep. 2023
thanks!
use fixed-point arithmetic is a good solution,I will test!
now I just delete the roundf, Refer to older versions of code generation(15b)

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

zhichao li
zhichao li am 17 Sep. 2023
I solved it by modify the function in can_helpers.tlc
%function roundRealValue(inVar, outVar, dataType)
%openfile buffer
%switch dataType
%case "real32_T"
%% %<outVar> = roundf(%<inVar>); //before
%<outVar> = %<inVar>;
%break
%case "real_T"
%case "real64_T"
%% %<outVar> = round(%<inVar>); //before
%<outVar> = %<inVar>;
%break
%endswitch
%closefile buffer
%return buffer
%endfunction

Kategorien

Mehr zu Trigonometry finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by