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!