coder.ceval for printf from stdio.h

8 ビュー (過去 30 日間)
Tomas Jurena
Tomas Jurena 2012 年 5 月 27 日
コメント済み: Kevin Berndsen 2015 年 3 月 18 日
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 件のコメント
Tomas Jurena
Tomas Jurena 2012 年 5 月 30 日
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.
Tomas Jurena
Tomas Jurena 2012 年 5 月 30 日
OK, no need to do that :) See the answer given by Fred Smith.

サインインしてコメントする。

採用された回答

Fred Smith
Fred Smith 2012 年 5 月 30 日
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 件のコメント
Tomas Jurena
Tomas Jurena 2012 年 5 月 30 日
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!
Kevin Berndsen
Kevin Berndsen 2015 年 3 月 18 日
Great workaround for the string termination problem. Thanks!

サインインしてコメントする。

その他の回答 (0 件)

タグ

製品

Community Treasure Hunt

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

Start Hunting!

Translated by