How can I use a coder.opaque value in a Matlab expression with codegen?
古いコメントを表示
Hi
I need to read in some parameter files for my system. I am using the example in the help files for coder.opaque to declare the file ID value. I would like to check the ID to see if the fopen call completed successfully, but I keep getting an error saying it will not accept a coder.opaque data type for the comparison:
% Declare 'fid' as an opaque type 'FILE *'
fid = coder.opaque('FILE *', 'NULL');
fid = coder.ceval('fopen', cmName, ['rb' 0]); % 0 term strings for c
if 0 == fid
coder.ceval('exit', '-1');
else
:
:
The error occurs at the line where I compare the fid to 0. I have tried several alternatives (assigning fid to another var, casting fid to a double, making a function to do the test) but they all fail with a variation of not allowing a comparison with a coder.opaque type.
I imagine that others have run into this problem, but I did not see any entries for it in the database.
Any help would be appreciated.
Thanks Sean
採用された回答
その他の回答 (2 件)
Nils Lande
2016 年 9 月 21 日
編集済み: Nils Lande
2016 年 9 月 21 日
coder.eval('(int)', fid) can be used to return the value as integer.
Example:
fp_int = int32(0);
fp = coder.opaque('FILE *', 'NULL'); % Declare the FILE pointer
fp = coder.ceval('fopen', szFileName, szMode);
fp_int = coder.ceval('(int)', fp);
if(fp_int == 0)
coder.ceval('printf', ['fopen returned NULL' char(10) 0]);
return;
else
coder.ceval('printf', ['File opened' char(10) 0]);
...
Kaustubha Govind
2012 年 11 月 5 日
0 投票
I don't think coder.opaque type variables can participate in MATLAB expressions. You might need to convert that expression to another coder.ceval call.
カテゴリ
ヘルプ センター および File Exchange で Algorithm Design Basics についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!