Conversion of argument from "real_T *" to "int" not possible error in matlab
2 views (last 30 days)
Show older comments
Bhushan Ravindra Attarde
on 24 Apr 2020
Commented: Bhushan Ravindra Attarde
on 25 Apr 2020
Hi,
I am working on integrating GPU coder into simulink. For the entry point function I am using state space equation.Next I am generating the dll using codegen and I have defined coder.externalDependancy API to link dll. Next I created a simulink model for state space equation. When I run the Simulink model, I am getting following error:
Conversion of argument from "real_T *" to "int" not possible error in matlab
The code for generating dll is :-
a = coder.typeof(zeros(10000,10000),[]);
b = coder.typeof(zeros(10000,10000),[]);
c = coder.typeof(zeros(10000,10000),[]);
d = coder.typeof(zeros(10000,10000),[]);
x = coder.typeof(zeros(10000,1),[]);
u = coder.typeof(zeros(10000,1),[]);
Ts = double(TS);
Tr = double(TR);
cfg = coder.gpuConfig('dll');
codegen -args {a,b,c,d,x,u,Ts,Tr} -config cfg State_Space_Eqn
TS and TR are user defined inputs.
For the conversion of TS and TR , I am getting this error. I think I am defining Ts and Tr wrong for the code generation.
Can you please help me with it?
Thank You
3 Comments
James Tursa
on 24 Apr 2020
Edited: James Tursa
on 24 Apr 2020
I still don't see TS and TR defined anywhere. Are these supposed to be the same as Ts and Tr?
Accepted Answer
Ram Kokku
on 25 Apr 2020
Hi Bhushan,
Can you provide sequence of steps that you followed to arrive at this point ?
From your question,
- It looks like code generation worked and you are able to generate DLL.
- to call this code from Simulink , you created a coder.externaldependency
- when you try to play the model, you see this error ?
Is my interpretation correct ? If so, lot me ask you few questions,
- How many inputs your S-function block expected to take 6 or 8 ?
- You mentioned TS and TR are in MATLAB workspace, are you trying to access these MATLAB variables from Simulink as well or you are creating inputs for these
- Error seems to be coming from some type conversion real_T * to int. this would have happen if S-function block is fed with wrong types, or a type of variable is not declared in advance and compiler made an assumption on the type
it would make solving your issue much easier if you could share your code - just the external dependency implementation and how you're using this block in Simulink.
2 Comments
Ram Kokku
on 25 Apr 2020
Hello Bhushan,
thanks for sharing the code. The problem is with your coder.ceval call. GPU Coder generated function takes 9 argumements - 8 inputs and 1 output. However, you are calling the function with 7 argumements. You have to pass TS and TR to coder.ceval in the same order you generated code with.
Current code :
coder.ceval('State_Space_Equation', coder.rref(A), coder.rref(B),coder.rref(C),coder.rref(D),coder.rref(X),coder.rref(U), coder.wref(c));
change this to:
coder.ceval('State_Space_Equation', coder.rref(A), coder.rref(B),coder.rref(C),coder.rref(D),coder.rref(X),coder.rref(U), TS, TR, coder.wref(c));
This should resolve this issue.
I also notice you have following code in your function. what is the intension of it ?
c = coder.nullcopy(A);
c = coder.nullcopy(B);
c = coder.nullcopy(C);
c = coder.nullcopy(D);
c = coder.nullcopy(X);
c = coder.nullcopy(U);
I think just first statement should be enough.
For this example to work correctly, you need to change your simulation language to C++. If you have not done that already, take a look at this gug report for more information.
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!