How to free memory from C-code in simulink embedded matlab code block

1 view (last 30 days)
Rodrigo Lopez Negrete
Rodrigo Lopez Negrete on 28 Jun 2022
Answered: Walter Roberson on 28 Jun 2022
Hi all,
I have an embedded matlab code block in a simulink simulation that makes calls to c functions to allocate memory and do some calculations. For example the code below: assume varA, varB are data structures created and allocated in C using the memallocfun function call.The types are defined in C.
persistent firstCall varA varB
if isempty(firstCall)
firstCall =1;
varA = coder.opaque('somestruct1 *','NULL','HeaderFile','defs.h');
varB = coder.opaque('somestruct2 *','NULL','HeaderFile','defs.h');
coder.ceval('memallocfun',coder.ref(varA),coder.ref(varB));
end
coder.ceval('workfun',coder.ref(varA),coder.ref(varB));
This code works and runs properly. My issue is that after the simulation is done I'd like to free the memory that was allocated by memallocfun. Should I do that in the StopFcn callback? Will StopFcn have access to the persistent variables created here? Otherwise, where should I free the memory created by C?
thanks!
Rodrigo

Answers (1)

Walter Roberson
Walter Roberson on 28 Jun 2022
StopFcn will not have access to the persistent variables. Use global and a datastore

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by