coder.ceval for printf from stdio.h

Hello, everybody! I'd like to generate C code from an m-file which makes use of MATLAB fprintf function as follows:
fprintf('Time level %-*.*f [s], Iterations: %d\n',field_width,precision,time,iter);
Since fprintf is not supported for the code generation, nor can I use coder.extrinsic method, I turn to a question:
How to rewrite the command using coder.ceval method and the standard C library function printf? To be more specific, what should the arguments be like in coder.ceval('printf', arguments); ?
While not using field_width and precision, C code generated from the following one executes without a problem:
s1=['%s%f%s%d' 10 0];
s2=['Time level ' 0];
s3=['[s], Iterations: ' 0];
coder.ceval('printf',s1,s2,time,s3,int32(iter));
However, including the asterisks and left-justify options cause segmentation fault whenever the generated C code is compiled, built and run. Any help is appreciated!

3 Commenti

I wonder if this is a bug. Could you try contacting MathWorks Tech Support about this?
Thank you for your comment. It really seems to be a bug, because running a MEX function causes MATLAB crash as well. I'll contact Tech support.
OK, no need to do that :) See the answer given by Fred Smith.

Accedi per commentare.

 Risposta accettata

This example worked for me:
function simple_printf
s1=['%s%-*.*f%s%d' 10 0];
s2=['Time level ' 0];
s3=['[s], Iterations: ' 0];
iter = 32;
time = 2.5;
field_width=int32(20);
precision=int32(3);
coder.ceval('printf',s1,s2,field_width,precision,time,s3,int32(iter));
Is your code different?
-Fred

2 Commenti

Yes, it is just a little bit different to yours, but the difference explains the origin of the problem. Both field_width and precision must be cast to an integer type. Now, it works for me, too. Shame on me, that I forgot about it :) Thank you very much!
Great workaround for the string termination problem. Thanks!

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su MATLAB Coder in Centro assistenza e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by