Conversion of argument from "real_T *" to "int" not possible error in matlab
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Bhushan Ravindra Attarde
el 24 de Abr. de 2020
Comentada: Bhushan Ravindra Attarde
el 25 de Abr. de 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 comentarios
James Tursa
el 24 de Abr. de 2020
Editada: James Tursa
el 24 de Abr. de 2020
I still don't see TS and TR defined anywhere. Are these supposed to be the same as Ts and Tr?
Respuesta aceptada
Ram Kokku
el 25 de Abr. de 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 comentarios
Ram Kokku
el 25 de Abr. de 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.
Más respuestas (0)
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!