How can I use a coder.opaque value in a Matlab expression with codegen?
Afficher commentaires plus anciens
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
Réponse acceptée
Plus de réponses (2)
Nils Lande
le 21 Sep 2016
Modifié(e) : Nils Lande
le 21 Sep 2016
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]);
...
1 commentaire
Sean
le 21 Sep 2016
Kaustubha Govind
le 5 Nov 2012
0 votes
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.
Catégories
En savoir plus sur Algorithm Design Basics dans Centre d'aide et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!